基本排序_希尔排序_Java实现
来源:互联网 发布:js 资源加载异常捕获 编辑:程序博客网 时间:2024/05/07 01:48
转载请注明出处:http://blog.csdn.net/ljmingcom304/article/details/50371927
本文出自:【梁敬明的博客】
1.希尔排序
希尔排序是直接插入排序的改进版,将序列按指定步长分为一组,对每组序列采用直接插入排序,然后将步长进行对半减小,重新进行分组,对每组序列采用直接插入排序,依次类推,直到减少到1,最终形成一个有序的序列。
存在一个序列【8】【5】【9】【6】【7】【4】【3】【1】,将其按照从小到大的顺序进行排序。
第一次排序,以4作为步长,分别将【8】【7】、【5】【4】、【9】【3】、【6】【1】分为一组,对每组进行直接插入排序。
第二次排序,以2作为步长,分别将【7】【3】【8】【9】、【4】【1】【5】【6】分为一组,对每组进行直接插入排序。
第三次排序,以1作为步长,将【3】【1】【7】【4】【8】【5】【9】【6】整个序列分为一组进行直接插入排序。
2.示例代码
对一个长度为N的序列从小到大进行排序,当前进行第n次排序时,按序列步长分为
public class ShellSort { public static void main(String[] args) { int[] array = { 4, 7, 8, 6, 5, 9, 3, 0, 2, 3 }; ShellSort.sort(array); System.out.println("排序后数组:" + Arrays.toString(array)); } /** * 将数组按步长进行分组,初始记录步长为数组长度的一半,然后采用直接插入排序对分组进行排序, * 步长依次减少进行排序,每次步长均为上次步长的一半,当步长的值减少到1时,整个数据合并为一组,构成一组有序记录,则完成排序。 */ public static void sort(int[] a) { int gap = a.length / 2;// 排序步长 // 将指定步长的元素分为一组 while (gap >= 1) { //对每组进行直接插入排序 for (int i = gap; i < a.length; i++) { int j = 0; int temp = a[i]; if (temp >= a[i - gap])// 第i个数比有序序列的最后一个数大,则进行下一次循环 continue; for (j = i - gap; j >= 0 && temp < a[j]; j = j - gap) { a[j + gap] = a[j]; } a[j + gap] = temp; } gap = gap / 2;// 减小步长 } }}
3.算法分析
时间复杂度:
算法的性能与所选分组的长度序列相关。
算法稳定性:
相同数据间可能会发生位置交换,希尔排序属于不稳定的排序算法。
0 0
- 基本排序_希尔排序_Java实现
- 基本排序_冒泡排序_Java实现
- 基本排序_选择排序_Java实现
- 基本排序_快速排序_Java实现
- 基本排序_归并排序_Java实现
- 基本排序_基数排序_Java实现
- 基本算法_堆排序_Java实现
- 基本算法_堆排序_Java实现
- 基本排序_直接插入排序_Java实现
- 希尔排序_Java
- 希尔排序_Java
- 排序算法_希尔排序
- 基本排序之希尔排序
- 基本排序算法--希尔排序
- 希尔排序基本思想
- 希尔排序基本思想
- 希尔排序基本思想
- 基本数据结构 -- 希尔排序
- 2014年android应用开发岗面试题总结
- hellocharts-android 简单使用
- dubbo/dubbox(一)源码编译
- 关于jquery的rorate插件在IE7,8下不转动的问题
- unity5 资源管理和打包
- 基本排序_希尔排序_Java实现
- Oracle中过程/函数返回结果集
- Oracle优化器
- 【实践】express搭建nodeJS中间层(一)
- CentOS 6.3以上下配置LVM(逻辑卷管理)
- 关于MD5和SHA-1的简单的介绍
- TCP三次握手连接及seq和ack号的正确理解
- Windows按钮类
- UIMenuContnroller的使用