常被提到的排序四(希尔排序)

来源:互联网 发布:saa7104监控软件 编辑:程序博客网 时间:2024/05/18 02:34

希尔排序

下面是《算法》书中对希尔排序的解释:

希尔排序的思想是使数组中任意介个为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] +" ");}}}


0 0
原创粉丝点击