首页 > 系统相关 >Shell排序复杂度分析

Shell排序复杂度分析

时间:2024-03-09 12:23:04浏览次数:26  
标签:Shell 发牌 int 插入排序 gap 排序 复杂度

Shell排序复杂度分析

1.大致思想

可以把希尔排序看作是发牌员,给每人轮流发一张牌。需要给n个人发牌,每人从第二张开始分别进行插入排序,那么第一轮下来后,
每人的牌就是有序的。接下来按照刚刚的发牌顺序把牌再收起来,减少人数,不断重复这个步骤,直到只剩下一个人,那么就是直接
插入排序。

希尔排序可以看作是插入排序的升级版本,通过分组预先插入排序,为后续的插如排序减少循环次数,达到提高效率的目的
简单来说,希尔排序是

  • 按照设置的 gap(<n)值,先将数组分为不同的几组,索引为i+gap*1、i+gap*2、...、i+gap*j(<n)的为一组
  • 对每组进行插入排序
  • 缩小gap值,直至缩小至1,回到第一步
  • 排序完成

2.代码实现

void swap(int*a,int*b){
    int tmp = *a;
    *a=*b;
    *b=tmp;
}

void shell_sort(int *a,int n){
    assert(a);
    for(int gap=n/2;gap>0;gap/=2){
        for(int i=gap;i<n;i++){
            for(int j=1;i-j*gap>-1;j++){
                if(a[i-(j-1)*gap]<a[i-j*gap])
                    swap(&a[i-(j-1)*gap],&a[i-j*gap]);
            }
        }
    }
}

和插入排序相似,从每组第二个元素开始遍历,对本组元素进行插入排序;gap更新后,重复该过程;gap=1时,直接进行
插入排序,最后结束。

复杂度

由于gap设置的差别,shell排序会出现不同的时间复杂度,此处仅分析gap以除以2减小的结果

最优情况:
时间复杂度:O(N)
空间复杂度:O(1)
平均情况:
时间复杂度:O(Nlog_2N)
空间复杂度:O(1)

标签:Shell,发牌,int,插入排序,gap,排序,复杂度
From: https://www.cnblogs.com/saopigqwq233/p/18062491

相关文章

  • MYSQL学习笔记9: DQL排序查询(升降序)
    DQL排序查询select字段列表from表名orderby字段1排序方式1,字段2排序方式2;排序方式ASC升序(默认)DESC降序如果是多字段排序,第一个字段值相同,会根据第二个字段的值进行排序,以此类推按年龄降序排序select*fromworkersorderbyagedesc;......
  • 通达信超金钻大涨排序指标公式源码
    {通达信超金钻大涨排序指标公式源码}X_1:=DYNAINFO(15)/DYNAINFO(4)/FINANCE(46)*(DYNAINFO(4)-REF(CLOSE,1))/REF(CLOSE,1)*10000;今开%:=(OPEN/REF(CLOSE,1)-1)*100;X_7:=CLOSE>=ZTPRICE(REF(CLOSE,1),0.1);X_8:=BArslAstCOUNT(X_7);昨日涨停次数:REF(X_8,1),NODRAW;X_......
  • webshell 管理工具流量特征分析
    1.冰蝎基于冰蝎的加密流量威胁,剖析其通信原理,冰蝎的通信过程可以分为两个阶段:密钥协商以及加密传输。第一阶段:密钥协商攻击者通过GET或者POST方法,形如(http://127.0.0.1/shell.aspx?pass=645)的请求服务器密钥。服务器使用随机数MD5的高16位作为密钥,存储到会话的$_SESS......
  • 通达信竞价绝杀排序指标公式
    {通达信竞价绝杀排序指标公式}{指标介绍:1.黄金甲信号稳定的创业板票(主力净额大于1500万,占比大于8%,流通市值小于80亿);2.情绪周期里面的三板以上的主板票(主力净额大于1500万,占比大于8%,流通市值小于150亿);3.昨日涨停的创业板票,今日高开(主力净额大于800万,占比大于8%,流通市值......
  • 6-12 奇偶分离排序(关注输出的空格处理)
    6-12奇偶分离排序(关注输出的空格处理)分数10作者王秀单位福州大学输入10个整数,完成一个函数使数据重新排序以后输出(也按空格分隔),要求:输出奇数在前偶数在后函数接口定义:voidsort_tarray(int*a);裁判测试程序样例:#include<cstdio>#include<iostream>#inclu......
  • mysql 按条件排序:order by 高级用法之case when, if 复杂排序
    转载自:https://blog.csdn.net/weixin_44684303/article/details/124445293实例1原始数据顺序需要的效果:学科按照顺序语文,数学,英语分数倒序演示创建表CREATETABLE`student_score`(`id`bigint(20)NOTNULLAUTO_INCREMENTCOMMENT'主键',`student_i......
  • 中转Webshell绕过流量检测防护
    0x01原理这里先给大家介绍一句话木马和菜刀的工作原理,了解的可以往下面翻一句话木马先说说一句话木马的原理<?phpeval($_POST['c']);?>先说说eval()这个函数简单点说,eval()这个函数会把参数当作代码来执行什么叫做把参数当作代码来执行,简单举个例子<?phpphpinfo();?>......
  • 神经网络—拓扑排序
    输入格式第一行是两个整数n(1≤n≤100)和p。接下来n行,每行两个整数,第i+1行是神经元i最初状态和其阈值(Ui),非输入层的神经元开始时状态必然为0。再下面P行,每行由两个整数i,j及一个整数Wij,表示连接神经元i、j的边权值为Wij。输出格式输出文件包含若干行,每行有两个整数,......
  • 归并排序
    includeincludeusingnamespacestd;intn,a[100100],b[100100];templateinlinevoidread(type&x){x=0;boolflag(0);charch=getchar();while(!isdigit(ch))flag^=ch=='-',ch=getchar();while(isdigit(ch))x=(x<<1)+(x<<3)+(ch^48),c......
  • VUE GRID WITH COMPONENT排序
    父组件:<!--Anexampleofcreatingareusablegridcomponentandusingitwithexternaldata.--><scriptsetup>importDemoGridfrom'../components/Grid.vue'import{ref}from'vue'constsearchQuery=ref('')......