(C语言)八大排序之:希尔排序

reference: https://www.cnblogs.com/chengxiao/p/6104371.html

插入排序,是稳定的。

希尔排序,是不稳定的。

       一次插入排序是稳定的,不会改变相同元素的相对顺序。希尔排序需要多次插入排序,值相同的元素可能在各自的插入排序中移动,最后其稳定性就会被打乱,所以shell排序是不稳定的。

        希尔排序,又称缩小增量排序,是直接插入排序算法的一种更高效的改进版本:增量gap,使元素的移动是跳跃式的,较少了元素移动的次数。

  1 #include 
  2 
  3 void insertSort(int a[], int len);
  4 void shellSort(int a[], int len);
  5 void display(int a[], int len);
  6 
  7 int main(int argc, char *argv)
  8 {
  9         int a[] = {2,6,7,2,5,9,0};
 10         int len = sizeof(a)/sizeof(a[0]);
 11 
 12         //insertSort(a, len);   // 插入排序
 13         shellSort(a, len);      // 希尔排序
 14 
 15         display(a, len);
 16         return 0;
 17 }
 18 
 19 // 插入排序:当前值与其前面的值比较,大于当前值的部分整体后移,
 20 // 再将当前值插入正确的位置
 21 void insertSort(int a[], int len)
 22 {
 23         int i;
 24         for(i=1; i=0 && temp=1; gap=gap/2)
 44         {
 45                 int i;
 46                 for(i=gap; i=0 && temp


你可能感兴趣的:(c)