希尔排序:
希尔排序也被称为“缩小增量排序”。基本原理:
先将待排序的数组元素分成多个子序列,使得每个子序列的元素个数相对较少,然后对各个子序列分别进行直接插入排序,待整个待排序序列“基本有序”后,最后再对所有元素进行一次直接插入排序。
具体步骤:
- 选择一个步长序列t1,t2,…,tk,满足ti>tj(i < j), tk = 1.
- 按步长序列个数k,对待排序序列进行k趟排序。
- 每趟排序,根据对应的步长ti ,将待排序列分割成ti 个子序列,分别对各个子序列进行直接插入排序。
public class ShellSorted {
public static void sorted(int[] num){
int len = num.length;
int i, j, h;
int temp;
for (h = len/2; h > 0; h = h/2) {
for (i = h; i < len; i++) {
temp = num[i];
for (j = i - h; j >= 0; j = j - h) {
if(temp < num[j])
num[j + h] = num[j]; //对比数较大的话后调
else
break;
}
num[j + h] = temp; //将对比数放在比较后的最终位置
}
}
}
public static void main(String[] args) {
int[] num = {2,4,3,1,6,5};
sorted(num);
for (int i = 0; i < num.length; i++) {
System.out.print(num[i] + " ");
}
}
}