希尔排序是插入排序的升级版,所以呀我们先贴上插入排序算法的源码吧
//插入排序 void InsertSort(int arr[], int num) { int j; for (int i = 1; i < num; i++) { if (arr[i] < arr[i - 1]) { int tmp = arr[i]; for (j = i; j > 0 && tmp < arr[j - 1]; j--) { arr[j] = arr[j - 1]; } arr[j] = tmp; } } }
我就不解释了,下面贴上希尔排序算法吧,其实在do语句里面用的就是插入排序算法的思想,只是步长不一样而已。
//希尔排序 int ShellSort(int arr[], int num) { int increasement = num; int i, j, k; do { //先分组 increasement = increasement / 3 + 1; for (i = 0; i < increasement; i++) //对每一组进行排序 { for (j = i + increasement; j < num; j += increasement) { if (arr[j] < arr[j - increasement]) { int tmp = arr[j]; for (k = j - increasement; k >= 0 && tmp < arr[k]; k-=increasement) { arr[k + increasement] = arr[k]; } arr[k + increasement] = tmp; } } } } while (increasement > 1); }