A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© luxinyu 中级黑马   /  2015-6-4 00:21  /  247 人查看  /  1 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文


希尔排序的原理:根据需求,如果你想要结果从大到小排列,它会首先将数组进行分组,然后将较大值移到前面,较小值
* 移到后面,最后将整个数组进行插入排序,这样比起一开始就用插入排序减少了数据交换和移动的次数,可以说希尔排序是加强
* 版的插入排序
* 拿数组5, 2, 8, 9, 1, 3,4来说,数组长度为7,当increment为3时,数组分为两个序列
* 5,2,8和9,1,3,4,第一次排序,9和5比较,1和2比较,3和8比较,4和比其下标值小increment的数组值相比较
* 此例子是按照从大到小排列,所以大的会排在前面,第一次排序后数组为9, 2, 8, 5, 1, 3,4
* 第一次后increment的值变为3/2=1,此时对数组进行插入排序,
public class ShellSort {
        public static void shellSort(int[] data) {
                int j = 0;
                int temp = 0;
                for (int increment = data.length / 2; increment > 0; increment /= 2) {
                        for (int i = increment; i < data.length; i++) {
                                temp = data[i];
                                for (j = i; j >= increment; j -= increment) {
                                        if(temp > data[j - increment]){
                                                data[j] = data[j - increment];
                                        }else{
                                                break;
                                        }
                                }
                                data[j] = temp;
                        }
                }
        }

        public static void main(String[] args) {
                int[] data = new int[] { 5, 2, 8, 9, 1, 3 ,4};

                System.out.println("未排序前");
                for (int i = 0; i < data.length; i++){
                        System.out.print(data[i] + " ");
                }
                       
                shellSort(data);
               
                System.out.println("\n排序后");
                for (int i = 0; i < data.length; i++)
                        System.out.print(data[i] + " ");
        }

}

1 个回复

倒序浏览
顶一个啊
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马