zoukankan      html  css  js  c++  java
  • 插入排序(希尔排序)

    直接插入排序


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

    0下标的元素作为比较元素(哨兵),从下标1开始进行排序。将待插入元素赋值给哨兵,让哨兵与前面有序的元素一一比较,寻找合适的位置,插入新的元素。

     1 void insertSort(int num[]){
     2     
     3     int i,j;
     4     for(i=2;i<n;i++){
     5         j = i-1;                            //i的前一个位置 
     6         num[0] = num[i];                    //num[0]是待插入元素,作为比较和交换,书上称为哨兵 
     7         while(num[0]<num[j]){                //待插入元素与前面的有序区进行比较 
     8             num[j+1] = num[j];                //该元素后移,为元素的插入腾出空间 
     9             j--;                            //j自减,插入元素寻找合适的位置插入 
    10         }
    11         num[j+1] =  num[0];                    //待插入元素插到该位置 
    12     }
    13     
    14 }

    希尔排序

     1 void shell(int num[]){
     2     
     3     int i,d;
     4     d = n/2;                            //称为步长,可除3或除2 
     5     for(i=d;i>0;i--){
     6         shellSort(num,i);                //每次步长减一 
     7     }
     8     
     9 }
    10 
    11 void shellSort(int num[],int det){
    12     
    13     int i,j,k;
    14     for(i=1;i<=det;i++)                      //从第1个元素开始 
    15         for(j=i+det;j<n;j=j+det){            //与普通插入排序思路一样 
    16             k = j - det;                     //只不过每次增减量为步长 
    17             num[0] = num[j];
    18             while(num[0]<num[k]){
    19                 num[k+det] = num[k];
    20                 k -= det;
    21             }
    22             num[k+det] = num[0];
    23         }
    24     
    25 }
  • 相关阅读:
    输出菱形
    for语句输出三角形
    阶乘倒数的和
    变量赋值判断奇偶
    928作业
    各种主流数据库的比较(所以说我觉得Oracle这个keng?入的不错?)
    Oracle创建表
    (转载)全球唯一标识GUID
    (转载)Java基础知识总结
    两天以来对plsqldev操作的记忆
  • 原文地址:https://www.cnblogs.com/lsy-lsy/p/11748695.html
Copyright © 2011-2022 走看看