希尔排序
下面是《算法》书中对希尔排序的解释:
希尔排序的思想是使数组中任意介个为h的元素都是有序的。这样的数组被称为h有序数组。换句话说,一个h有序数组就是h个互相独立的有序数组编织在一组成的一个数组。在及进行排序时,如果h很大,我们就能将元素移动到很远的地方,为实现更小的h有序创造方便。用这种方式,对于任意以1结尾的h序列,我们都能够将数组排序。
希尔排序:
希尔排序我个人 的理解:
* 按我个人的理解是将整个数组先分成等长度的小数组
* 然后先将每个数据的第一数按顺序排序
* 排序完后再将数组的区间继续缩小
* 知道排序完成
代码实现:public class ShellSort {
public static void sort(int[] source){
int N = source.length;
int h = N /2;
while(h >= 1){
//将数据变为h有序
for (int i = h; i < source.length; i++) {
//将source[i]插入到source[i-h],source[i-2h],source[i-3h],source[i-4h]...之中
for(int j = i ; j >= 0 && (source[i] > source[j]); j =j-h){
swap(source, j , j-h);
}
}
//第一轮排序完将区间减小
h = h/2;
}
}
/*
* 创建方法,由于交换数的位置
*/
private static void swap(int[] source, int x, int y) {
int temp = source[x];
source[x] = source[y];
source[y] = temp;
}
public static void main(String[] args) {
int[] a = {1,2,3,7,3,4,12,-23,54,76};
sort(a);
for (int i = 0; i < 10; i++) {
System.out.print(a[i] +" ");
}
}
}
public class ShellSort {
public static void sort(int[] source){
int N = source.length;
int h = N /2;
while(h >= 1){
//将数据变为h有序
for (int i = h; i < source.length; i++) {
//将source[i]插入到source[i-h],source[i-2h],source[i-3h],source[i-4h]...之中
for(int j = i ; j >= 0 && (source[i] > source[j]); j =j-h){
swap(source, j , j-h);
}
}
//第一轮排序完将区间减小
h = h/2;
}
}
/*
* 创建方法,由于交换数的位置
*/
private static void swap(int[] source, int x, int y) {
int temp = source[x];
source[x] = source[y];
source[y] = temp;
}
public static void main(String[] args) {
int[] a = {1,2,3,7,3,4,12,-23,54,76};
sort(a);
for (int i = 0; i < 10; i++) {
System.out.print(a[i] +" ");
}
}
}