希尔排序
1.实现过程
希尔排序,是按照缩量进行分割元素,然后对分割的元素进行比较,具体可以看下方的排序过程。
2.排序过程
第一趟排序
序列中11个元素,按照二分法划分,11/2 向下取整为 5,划分为两个部分,对两个部分进行两两比较,如:49和13,38和27进行比较,交换位置,然后得出了第一趟排序,13,27,49,55,4,49,38,65,97,76,91。
第二趟排序
第二趟排序,因为划分为两部分,按照二分法继续划分,5/2 向下取整 为2,然后对元素进行比较,13,49,4,38,97,91比较并排序,27,55,49,65,76比较并排序,交换位置,得到4,27,13,49,38,55,49,65,91,76,97。
第三趟排序
第三趟排序,继续使用二分法进行划分 2/2 向下取整为 1,进行元素的比较最终得出排序结果。
3.实现代码
/**
* 希尔排序,按照基数进行排序
*/
public class ShellSort {
public static void main(String[] args) {
int data[] = new int[]{49, 38, 65, 97, 76, 13, 27, 49, 55, 4, 91};
int temp;
int a = 0;
for (int gap = data.length/2; gap > 0; gap/=2){
for (int i = gap; i < data.length; i++){
temp = data[i];
int j;
for (j = i; j >= gap && data[j-gap] > temp;j-=gap){
data[j] = data[j-gap];
}
data[j] = temp;
}
a++;
System.out.format("第 %d 趟: \t", a);
printPart(data, 0, data.length - 1);
}
}
// 打印序列
static void printPart(int[] list, int begin, int end) {
for (int i = 0; i < begin; i++) {
System.out.print("\t");
}
for (int i = begin; i <= end; i++) {
System.out.print(list[i] + "\t");
}
System.out.println();
}
}