希尔排序,也称递减增量排序算法,是插入排序的一种更高效的改进版本。希尔排序是非稳定排序算法。

希尔排序是基于插入排序的以下两点性质而提出改进方法的:

  • 插入排序在对几乎已经排好序的数据操作时,效率高,即可以达到线性排序的效率
  • 但插入排序一般来说是低效的,因为插入排序每次只能将数据移动一位

过程演示:

  1. 1 #include <stdio.h>
  2. 2
  3. 3 void shell_sort(int arr[], int len) {
  4. 4 int gap, i, j;
  5. 5 int temp;
  6. 6 for (gap = len >> 1; gap > 0; gap = gap >> 1)
  7. 7 for (i = gap; i < len; i++) {
  8. 8 temp = arr[i];
  9. 9 for (j = i - gap; j >= 0 && arr[j] > temp; j -= gap)
  10. 10 arr[j + gap] = arr[j];
  11. 11 arr[j + gap] = temp;
  12. 12 }
  13. 13 }
  14. 14
  15. 15 int main() {
  16. 16 int arr[] = { 22, 34, 3, 32, 82, 55, 89, 50, 37, 5, 64, 35, 9, 70 };
  17. 17 int len = (int) sizeof(arr) / sizeof(*arr);
  18. 18 int i;
  19. 19 shell_sort(arr, len);
  20. 20
  21. 21 for (i = 0; i < len; i++)
  22. 22 printf("%d ", arr[i]);
  23. 23 return 0;
  24. 24 }

shell_sort

 

版权声明:本文为CSAH原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://www.cnblogs.com/CSAH/p/10980179.html