插入排序(希尔排序)
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 }
以上是关于插入排序(希尔排序)的主要内容,如果未能解决你的问题,请参考以下文章