希尔排序
Posted Lune-Qiu
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了希尔排序相关的知识,希望对你有一定的参考价值。
希尔排序主要使用插入排序的思想。
插入排序更适用于元素少的情况。所以希尔排序的主要方法就是讲数组分为一个一个更小的组,然后将每个小组用插入排序的方式排序。
分组方式:现将步长设为数组长度的一半,然后每次分组减少一步。
代码:
1 void ShellSort(int* arr,int len) 2 { 3 if(arr == NULL || len < 0) return; 4 int step ; 5 for(step = len/2;step > 0;step--)//步数变化 6 { 7 for(int i = 0;i < step;i++)//第几组 8 { 9 for(int j = i+step; j < len;j+=step)//组中循环进行插入排序 10 { 11 int k = j-step;//有序的最后一个 12 int tmp = arr[j];//无序的第一个 13 while(tmp < arr[k] && k >= i) 14 { 15 arr[k+step] = arr[k]; 16 k = k - step; 17 } 18 //无序元素放入 19 arr[k+step] = tmp; 20 } 21 } 22 } 23 }
以上是关于希尔排序的主要内容,如果未能解决你的问题,请参考以下文章