『 i = 1 』时,比较 1 和 2 ,不交换,只要不交换就自增 1 。
『 i = 2 』时,比较 2 和 4 ,不交换,只要不交换就自增 1 。
『 i = 3 』时,比较 4 和 6 ,不交换,只要不交换就自增 1 。
『 i = 4 』时,表达式 ( i < n ) 不成立,排序结束。
顺序输出为 [ 1 2 4 6 ]。
地精排序算法代码 1template <class T>2void gnome_sort_1(T data[], int n, bool comparator(T, T)){
3 int i = 1;
4 while (i < n){
5 if (i > 0 && comparator(data[i], data[i-1])){
6 swap(data[i], data[i-1]);
7 i--;
8 }else{
9 i++;
10 }
11 }
12}
这种地精排序算法还有很多优化的空间,这里小吴就不展开来讲了。
End鸡尾酒排序和地精排序虽然被程序员小吴归为奇葩排序一类,但是它们还是有一定的使用场景的。
在「大部分元素有序」的情况下,使用鸡尾酒排序可以减少排序的回合数。
地精排序最著名的特点是代码只有一层循环,在「大部分元素有序」的情况下,可以减少排序回合数。
今日问题除了鸡尾酒排序和地精排序以外,你还知道哪些排序适合用于「大部分元素有序」的序列进行排序?