首页 > 编程知识 正文

希尔排序增量为3,选择排序和冒泡排序哪个快

时间:2023-05-04 15:19:05 阅读:141682 作者:1880

一)基本概念1 )概念)排序是指将一系列记录按照其中某个关键词或某个关键词的大小,按升序或降序排列的操作。 在平时的上下文中,说到排序,通常是指升序(而不是降序)

2 .稳定性两个相等的数据,排序后,如果排序算法能保证相对位置不变,该算法称为稳定性排序计算

法律。

用简单的图说明一下吧。 图中所示的数据有两个3。 排序后,如果黑3还是红3之后,这样的排序是稳定的,否则是不稳定的。

3.Java一般排序

2 .具体排序代码的实现

1 .直接插入排序

稳定性(稳定性) )稳定性排序是排序中无跳跃性的交换数据

1 .稳定排序变为不稳定排序

2 .本身不稳定的东西就不会稳定

空间复杂性: o(1); 时间复杂性:最佳情况: o(n )序列有序时;

最坏情况:最坏情况o(n2 )序列无序时;

思路:以升序为例

1 .先用I从头遍历数组;

2 .接下来在外面拿一个空格tmp,每次加arr[i];

3 .然后定义变量j。 j的初始值为i-1;

4 .比较arr[j]和tmp的大小,如果大于tmp,则在j 1的位置输入arr[j];

5 .排队直到I遍历数组。

publicstaticvoidinsertsort (int [ ] arr ) for ) intI=1; i arr.length; I({inttmp=arr[I] ); int j=i-1; for (; j=0; j--}{if(arr[j]tmp ) { arr[j 1]=arr[j]; }else{ break; } } arr[j 1]=tmp; (2.希尔排序

稳定性(不稳定) )

1 .稳定排序变为不稳定排序

2 .本身不稳定的东西就不会稳定

空间复杂度: o(n ) 1.3 )-o ) n ) 1.5;

时间复杂性:

最佳情况: o(n )序列有序时;

最坏的情况(最坏的情况) o ) n^2)序列无序的情况

思路:以升序为例

1 .希尔排序实际上是直接插入排序的优化

2 .分组一组数据。 例如,下面的图被分成五个组,并在gap==5的情况下,从第0个位置开始添加gap,以确定集合中的元素。 下面的同种颜色是一组。

3 .然后各组采用直接插入排序的方法,进行排序;

4 .本次排序结束后,接下来分为三组,通过调用直接插入排序,接下来可以分成两组,也可以直接分组;

5 .分组到分组排完顺序,即可排序;

6 .那么,你一定想知道如何选择gap。 你注意到小组数被称为素数了吗? 因此,组数根据数据大小选择合适的像素数组。 例如,下一组数据如果有15个元素,则分别分为5、3、1组。

//希尔排序(优化)直接插入排序) publicstaticvoidshellsort ) int[]arr ) )/1 .首先组数gqpint ) ) drr={ 5,3,1 }; //定义增量数组for (inti=0; i drr.length; I )壳(ARR,drr[i]; }//直接插入排序publicstaticvoidshell(int[]arr,int gap ) ) for ) int gap; i arr.length; I({inttmp=arr[I] ); int j=i-gap; for (; j=0; j -=gap () if ) arr[j]tmp ) { arr[j gap]=arr[j]; }else{ break; } } arr[j gap]=tmp; }3.结果测试公共类测试{//直接插入排序公共类测试(int [ ] arr ) ) for(intI=1; i arr.length; I({inttmp=arr[I] ); int j=i-1; for (; j=0; j--}{if(arr[j]tmp ) { arr[j 1]=arr[j]; }else{ break; } } arr[j 1]=tmp; () /希尔排序)优化直接插入排序)对数组进行分组publicstaticvoidshellsort (int [ ] arr )/1 .首先是组数gqpint ) ) drr={ 5,3,1 }; //定义增量数组for (inti=0; i drr.length; I )壳(ARR,drr[i]; }//直接插入排序publicstaticvoidshell(int[]arr,int gap ) ) for ) int gap; i arr.length; I({inttmp=arr[I] ); int j=i-gap; for (; j=0; j -=gap () if ) arr[j]tmp ) { arr[j gap]=arr[j]; }else{ break; } } arr[j gap]=tmp; }//测试主方法publicstaticvoidmain (string [ ] args ) ) /直接插入排序int [ ] arr={ 2,3,5,1,6,4 }; 插入(arr ); 直接插入System.out.print (排序结果: ); for(intI=0; i arr.length; I ) system.out.print(arr[I] ' ); } System.out.println (; //希尔排序int [ ] arr1={ 7,4,9,34,0,8,5,22,55,6,12,33,56,89,77 }; 壳核快照(arr1; System.out.print (希尔排序结果: ); for(intI=0; i arr1.length; I ) {system.out.print(arr1[I] '; } System.out.println (; }

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。