. 希尔排序是插入排序的加强版,插入排序和选择排序都是与相邻的两个元素做比较和交换,希尔排序是将数组按一定的大小进行“分组” 每组数组姑且认为他们是“有序”的然后在组与组之间相同的索引做比较和交换。如果分组很大的话那么就能将元素挪动到很远的地方去,尽可能的构建一个有序的数组出来,最后再用插入排序做收尾。
bool Shell(int *Array, int ArrayLength) { int h = 1; //分组长度的选择在算法 while (h < (ArrayLength / 3)) { h = 3 * h + 1; } while (h >= 1) { for (int i = h; i < ArrayLength; i++) { for (int j = i; j >= h && (Array[j] < Array[j - h]); j-= h) { int tmp = Array[j - h]; Array[j - h] = Array[j]; Array[j] = tmp; } } h /= 3; } return true; }

发表评论