冒泡排序的一个不错的改进。与希尔排序有点类似,梳排序在冒泡排序的基础上,提出了gap的概念,使元素的推进快了很多。相当于将原先的一行元素以gap为分界分成几段排成几行,然后按列来用冒泡排序。然后不断缩小gap直至gap为1或元素已经有序(这是冒泡排序的一个特点,凡是改编自冒泡排序(如鸡尾酒排序)都有这个特点,即在遍历过程中就可以确认已经排好序)。
public static void combSort(int[] A){ int gap = A.length; boolean unsorted = true; while(gap > 1 || unsorted){ if(gap > 1) { gap = (int)(gap/1.3); //The best rate is 1.3 } unsorted = false; for(int i = 0; i+gap < A.length; i ++){ if(A[i] > A[i+gap]){ swap(A, i, i+gap); unsorted = true; } } } }