希尔排序
2016-04-03 17:21
267 查看
基本思想
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()
相关文章推荐
- Nightmare --- 炸弹时间复位
- hdu 【1754】 I Hate It
- 顺序结构栈
- 第五周学习进度情况
- 《深入理解计算机系统》第七章学习笔记
- 如何化解做微商的几大困惑
- Android任务和返回栈完全解析,细数那些你所不知道的细节
- 贝叶斯估计学习中的小趣
- 第五周学习进度
- KMA & ex_KMP---Revolving Digits
- CHEMKIN 4.1 与 CHEMKIN-Pro 4.5 C++ Visual Studio 解决方案
- [bzoj2734][HNOI2012]集合选数
- 表单异步提交
- windowMmanagerService touch事件传递
- leetcode之Power of Three
- HDOJ 2053 Switch Game
- iOS程序优化要点
- 学习Python,学习Pygame(四)
- IOSRadioGroup
- Ruby语言基础学习十一:Ruby异常 和综述