梳排序算法
算法
def comb_sort(a[]) :
j <- n, s <- 1.3, flag <- false
while j > 1 or false = true :
i <- 0, j <- max{|j/s|, 1}, flag <- false
while i + j < n or i + j = n:
if a[i] > a[i+j] then
exchange a[i] and a[i+j]
flag <- true
end if
i <- i + 1
end while
end while
梳排序算法测试
import java.util.Arrays;
public class Test {
public static void main(String[] args) {
int[] a = {1564, 223, 32343, 4342, 645, 893, 8932, 345};
comb_sort(a);
//输出为:[223, 345, 645, 893, 1564, 4342, 8932, 32343]
System.out.println(Arrays.toString(a));
}
// 梳排序函数
private static void comb_sort(int[] array) {
int len = array.length;
int j = len - 1;
float s = 1.3F; //
boolean flag = false;
int temp = 0;
while (j > 1 || flag == true) {
int i = 0;
j = Math.max((int)Math.floor(j/s), 1);
flag = false;
while (i + j < len) {
System.out.println("i = " + i+ " j = " + j + " flag =" + flag);
System.out.println(Arrays.toString(array));
if (array[i] > array[i+j]) {
temp = array[i];
array[i] = array[i+j];
array[i+j] = temp;
flag = true;
}
i++;
}
}
}
}