数据结构与算法——希尔排序(Java实现)
来源:互联网 发布:centos 升级python 编辑:程序博客网 时间:2024/06/01 16:16
算法背景:
* 对于大规模乱序数组,插入排序很慢;因为它只能交换相邻元素
* ,因此元素只能从数组的一端一点一点地移动到另一端。
* 希尔排序为了加快速度,简单滴改进了插入排序,交换不相邻的
* 元素对数组的局部进行排序,并最终用插入排序将局部有序的数组
* 排序
希尔排序思想
* 使数组中任意间隔为H的元素都是有序的,换句话说,一个H有序数
* 组就是H个相互独立的有序数组编织在一起组成的一个数组
public class sell_sort{
public static void sort(Comparable[] a)
{
//将数组升序排列
int N=a.length;
int H=1;
while(H<N/3) H=3*H+1;
while(H>=1)
{
//将数组变为H有序
for(int i=H;i<N;i++)
{
//将a[i]插到a[i-H],a[i-2H],a[i-3H]...之间
for(int j=i;j>=H&&(a[j].compareTo(a[j-H])<0);j-=H)
{
Comparable t=a[j];
a[j]=a[j-H];
a[j-H]=t;
}
H=H/3;
}
}
}
}
//上述算法在最坏情况下的比较次数和N^(3/2)正相关
* 对于大规模乱序数组,插入排序很慢;因为它只能交换相邻元素
* ,因此元素只能从数组的一端一点一点地移动到另一端。
* 希尔排序为了加快速度,简单滴改进了插入排序,交换不相邻的
* 元素对数组的局部进行排序,并最终用插入排序将局部有序的数组
* 排序
希尔排序思想
* 使数组中任意间隔为H的元素都是有序的,换句话说,一个H有序数
* 组就是H个相互独立的有序数组编织在一起组成的一个数组
public class sell_sort{
public static void sort(Comparable[] a)
{
//将数组升序排列
int N=a.length;
int H=1;
while(H<N/3) H=3*H+1;
while(H>=1)
{
//将数组变为H有序
for(int i=H;i<N;i++)
{
//将a[i]插到a[i-H],a[i-2H],a[i-3H]...之间
for(int j=i;j>=H&&(a[j].compareTo(a[j-H])<0);j-=H)
{
Comparable t=a[j];
a[j]=a[j-H];
a[j-H]=t;
}
H=H/3;
}
}
}
}
//上述算法在最坏情况下的比较次数和N^(3/2)正相关
0 0
- 数据结构与算法——希尔排序(Java实现)
- 希尔排序实现(ShellSort) Java数据结构与算法
- 数据结构与算法(9)---Java语言实现:希尔排序
- 数据结构与算法——希尔排序
- 数据结构与算法——希尔排序
- 数据结构与算法分析(Java语言描述)(4)—— 希尔排序
- Java数据结构与算法《八》希尔排序
- 【大话数据结构&算法】希尔排序(Java/C实现源码)
- 数据结构与算法——插入排序和希尔排序
- (数据结构与算法分析 八)------插入排序,希尔排序,归并排序的实现( Java语言描述)
- 算法与数据结构(五)--希尔排序
- 数据结构与算法(八)希尔排序
- 数据结构与算法——插入类排序(直接插入排序,希尔排序)
- 排序算法—希尔排序算法分析与实现(Python)
- 数据结构与算法专题之查找与排序——插入类排序(插入、希尔)
- 数据结构排序算法——希尔排序
- 算法与数据结构——选择,插入,希尔排序
- 【数据结构与算法】希尔排序
- Java中的泛型(Generic)
- mongodb 学习笔记 02 -- CURD操作
- hdu 1811 拓扑排序+并查集
- Java基础——Statement与PrepareStatement
- 仅仅是来自深夜的想法
- 数据结构与算法——希尔排序(Java实现)
- 循环广告位组件的实现
- 【ios开发学习 - 第五课】UITableView使用
- 对于两个月培训学习java与javaweb的心得,学习之路:说的少做的多胜过说的多做的少的
- Python之程序打包
- 2015“嘉杰信息杯”中国大学生程序设计比赛(湖南)暨湘潭市第七届大学生程序设计比赛
- dbunit 入门
- 【Linux探索之旅】开宗明义+第一部分第一课:什么是Linux?
- 滚动图片之ViewPager的使用