码迷,mamicode.com
首页 > 编程语言 > 详细

希尔排序

时间:2016-04-03 18:47:23      阅读:152      评论:0      收藏:0      [点我收藏+]

标签:

基本思想

1.把记录按步长 gap 分组,对每组记录采用直接插入排序方法进行排序。
2.随着步长逐渐减小,所分成的组包含的记录越来越多,当步长的值减小到 1 时,整个数据合成为一组,构成一组有序记录,则完成排序。

代码实现

package com.csdhsm.sort;

/** 
 * @Title: ShellSort.java
 * @Package: com.csdhsm.sort
 * @Description 希尔排序
 * @author Han
 * @date 2016-4-3 下午5:04:01 
 * @version V1.0
 */ 
      
public class ShellSort {
    
    public void sort(int[] arr,int len){
        
        /**
         * 步长默认为长度/2
         */
        int gap = len/2;
        
        /**
         * 当步长gap为1时,结束排序
         */
        while(gap >= 1){
            
            // 把距离为 gap 的元素编为一个组,扫描所有组
            for(int i = gap;i < len;i ++){
                
                int temp = arr[i];
                int j = 0;
                
                // 对距离为 gap 的元素组进行排序
                for(j = i-gap;j >= 0 && temp < arr[j];j = j-gap){
                    
                        arr[i] = arr[j];
                }
                arr[j + gap] = temp;
            }
            //减小增量
            gap = gap / 2;
        }
    }
}

效率分析

不稳定

空间复杂度:O(1)

时间复杂度:O(nlog2n)

最坏情况:O(nlog2n)

最好情况:O()

希尔排序

标签:

原文地址:http://www.cnblogs.com/a294098789/p/5350173.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!