C语言各种排序算法

来源:互联网 发布:linux创建用户所在群组 编辑:程序博客网 时间:2024/05/19 11:19

1、shell排序(希尔排序)

思想:把记录按下标的一定增量分组,对每组使用直接插入算法排序;随着增量逐渐减少,每组包含的关键字越来越多,当增量减少至1时,整个文件恰被分为一组,算法终止。

优点:直接插入排序的改进版。
(1)不需要大量的辅助空间;(2)时间复杂度与增量序列的选取有关,(希尔增量时间复杂度为O(n^2)),希尔排序的时间复杂度下限是O(n(log2n)),对于中等大小规模表现良好;(3)最坏情况和平均情况下执行效率相差不是很大,而快排在最坏情况下执行的效率会非常差。

这里写图片描述

  • 希尔增量排序代码:
   #include <stdio.h>   void shellsort(int array[], int len)   {       int dist; //distance       int i;       int j;       int temp;      for (dist = len / 2; dist > 0; dist /= 2)      {          for (i = dist; i < len; i++)          {              for (j = i - dist; (j >= 0) && (array[j] > array[j+dist]); j -= dist)              {                  temp = array[j];                  array[j] = array[j+dist];                  array[j+dist] = temp;              }  //  //          if (array[i-dist] > array[i])  //(X)要注意:交换后,之前的顺序要保持正确。。。。。  //          {  //            temp = array[i-dist];  //            array[i-dist] = array[i];  //            array[i] = temp;            }          }      }  }  int main()  {      int i = 0;      int array[20] = {13, 5, 4, 1, 2, 9, 14, 11};      for (; i < 8; i++)      {          printf("%d\t", array[i]);      }      printf("\n");      shellsort(array, 8);      for (i = 0; i < 8; i++)      {          printf("%d\t", array[i]);      }      printf("\n");      return 0;  }
原创粉丝点击