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 }
  • 相关阅读:
    POJ 3164 Command Network 最小树形图 朱刘算法
    区间dp专题
    HDU2896病毒入侵AC_自动机
    HDU2222Keywords Search AC_自动机
    Linux cat命令参数及使用方法详解
    MySQL分支Percona, cmake编译安装
    PHP网站简单架构 – 单独跑php-fpm
    Tengine – Nginx衍生版
    jemalloc优化MySQL、Nginx内存管理
    TCMalloc优化MySQL、Nginx、Redis内存管理
  • 原文地址:https://www.cnblogs.com/lsy-lsy/p/11748695.html
Copyright © 2011-2022 走看看