希尔排序

package com.zhao.algorithm.sort;

import java.util.Arrays;

/**
 * 希尔排序
 * 根据步长把里面的数字分组 两两比较交换位置,不断缩短步长直到为0为止
 * 适合中型的数据规模
 */
public class ShellSort {
    public static void main(String[] args) {
        int []arr = { 8, 7, 9, 6, 12,  2, 5, 4, 8};
        shellSort(arr);
        System.out.println(Arrays.toString(arr));
    }

    /**
     * 希尔排序
     * 因为 是两两交换的所以等步长变为一是数组已经被排好序了
     * @param arr  要排序的数组
     */
    static void shellSort(int[] arr) {
        //遍历所有的步长
        for (int d = arr.length / 2; d > 0; d/=2) {
            //遍历所有元素,从数据的中间位置开始遍历
            for (int i = d; i < arr.length; i++) {
                //遍历本组中的所有元素
                for (int j = i-d; j >=0 ; j-=d) {
                    //如果当前元素大于加上步长的元素
                    if (arr[j] > arr[j + d]) {
                        int tmp = arr[j + d];
                        arr[j + d] = arr[j];
                        arr[j] = tmp;
                    }
                }

            }
        }
    }

}

 

posted @ 2020-02-14 22:16  Angry-rookie  阅读(56)  评论(0)    收藏  举报