插入排序(希尔排序)

Posted lsy-lsy

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了插入排序(希尔排序)相关的知识,希望对你有一定的参考价值。

直接插入排序


将数组分为有序区和无序区,开始时第一个元素就是有序区,与第二个元素比较,第一二元素排好序后,再将第三个元素与前2个元素比较插入到合适的位置。后面依次操作。

 1 void insertSort(int num[],int l) {
 2     
 3     int i,j,t;
 4     for(i=1;i<l;i++)                    //i从1开始 
 5         for(j=0;j<=i;j++){                //j每次都要从0开始,一直到等于i 
 6             if(num[j]>num[i]){            //i与前面的有序区进行比较再交换 
 7                 t = num[j];
 8                 num[j] = num[i];
 9                 num[i] = t;
10             }
11         }
12     
13 }

 

 

希尔排序

技术图片

技术图片

技术图片

 

 1 void shellSort(int num[],int l){
 2     
 3     int i,j;
 4     int t;                                    //临时变量 
 5     int n;                                    //i每次开始的下标 
 6     int k=(l/3)+1;                            //每次的增量 
 7     while(k>0){                                //k>0就一直排序 
 8         for(n=0;n<k;n++)                    //在k变换的情况下,n每次重置为0
 9             for(i=n+k;i<l;i+=k)                //这两个for循环就是直接插入排序,只不过每次增量为k    
10                 for(j=n;j<=i;j+=k){
11                     if(num[j]>num[i]){
12                         t = num[i];
13                         num[i] = num[j];
14                         num[j] = t;
15                     }
16                 }
17         k--;                                //每次减小增量    
18     }    
19 }

 

以上是关于插入排序(希尔排序)的主要内容,如果未能解决你的问题,请参考以下文章

排序算法学习(直接插入排序,希尔排序,选择排序,堆排序,冒泡排序)

希尔排序

希尔排序的介绍和希尔排序基本思想以及代码实现

插入排序和希尔排序(Java)

插入排序和希尔排序(Java)

插入排序和希尔排序(Java)