希尔排序
2016-07-10 16:58
453 查看
希尔排序
1. 希尔排序的产生:
希尔排序基于插入排序,添加了一些新特性,从而提高插入排序的执行效率。
2. 插入排序的缺陷:多次移动
假如一个很小的数据在靠右端的位置上,那么要将该数据排序到正确的位置上,则所有的中间数据都要向右移动一位。
3. 希尔排序的优点:
希尔排序通过加大插入排序中元素之间的间隔,并对这些间隔的元素进行插入排序,从而使得数据可以大幅度的移动。当完成该间隔的排序后,希尔排序会减少数据的间隔进行排序。依次进行下去。
4. 间隔的计算:
间隔h的初始值为1,通过h=3*h+1来循环计算,直到该间隔大于数组的大小时停止。最大间隔为不大于数组大小的最大值。
5. 间隔的减少:
可以通过公司h=(h-1)/3来计算。
特点:右侧不会有太多太大的数据。
希尔排序的实现:
/*
* 希尔排序
*/
public
classShellSort {
/**
* 排序方法
*/
public
static void sort(long[] arr) {
//初始化一个间隔
int h = 1;
//计算最大间隔
while(h < arr.length / 3) {
h= h * 3 + 1;
}
while(h > 0) {
//进行插入排序
long tmp = 0;
for(int i = h; i < arr.length; i++) {
tmp= arr[i];
int j = i;
while(j > h - 1 &&arr[j - h] >= tmp) {
arr[j]= arr[j - h];
j-= h;
}
arr[j]= tmp;
}
//减小间隔
h= (h - 1) / 3;
}
}
}
public
classTestShellSort {
public
static void main(String[] args) {
long[] arr =
new long[10];
arr[0]= 90;
arr[1]= 12;
arr[2]= 23;
arr[3]= 15;
arr[4]= -4;
arr[5]= 1;
arr[6]= 97;
arr[7]= 4;
arr[8]= 3;
arr[9]= 8;
System.out.print("[");
for(long num : arr) {
System.out.print(num +
" ");
}
System.out.print("]");
System.out.println();
ShellSort.sort(arr);
System.out.print("[");
for(long num : arr) {
System.out.print(num +
" ");
}
System.out.print("]");
System.out.println();
}
}
运行结果:
[90 12 23 15 -4 1 97 4 3 8 ]
[-4 1 3 4 8 12 15 23 90 97 ]
第9讲快速排序
1. 希尔排序的产生:
希尔排序基于插入排序,添加了一些新特性,从而提高插入排序的执行效率。
2. 插入排序的缺陷:多次移动
假如一个很小的数据在靠右端的位置上,那么要将该数据排序到正确的位置上,则所有的中间数据都要向右移动一位。
3. 希尔排序的优点:
希尔排序通过加大插入排序中元素之间的间隔,并对这些间隔的元素进行插入排序,从而使得数据可以大幅度的移动。当完成该间隔的排序后,希尔排序会减少数据的间隔进行排序。依次进行下去。
4. 间隔的计算:
间隔h的初始值为1,通过h=3*h+1来循环计算,直到该间隔大于数组的大小时停止。最大间隔为不大于数组大小的最大值。
5. 间隔的减少:
可以通过公司h=(h-1)/3来计算。
特点:右侧不会有太多太大的数据。
希尔排序的实现:
/*
* 希尔排序
*/
public
classShellSort {
/**
* 排序方法
*/
public
static void sort(long[] arr) {
//初始化一个间隔
int h = 1;
//计算最大间隔
while(h < arr.length / 3) {
h= h * 3 + 1;
}
while(h > 0) {
//进行插入排序
long tmp = 0;
for(int i = h; i < arr.length; i++) {
tmp= arr[i];
int j = i;
while(j > h - 1 &&arr[j - h] >= tmp) {
arr[j]= arr[j - h];
j-= h;
}
arr[j]= tmp;
}
//减小间隔
h= (h - 1) / 3;
}
}
}
public
classTestShellSort {
public
static void main(String[] args) {
long[] arr =
new long[10];
arr[0]= 90;
arr[1]= 12;
arr[2]= 23;
arr[3]= 15;
arr[4]= -4;
arr[5]= 1;
arr[6]= 97;
arr[7]= 4;
arr[8]= 3;
arr[9]= 8;
System.out.print("[");
for(long num : arr) {
System.out.print(num +
" ");
}
System.out.print("]");
System.out.println();
ShellSort.sort(arr);
System.out.print("[");
for(long num : arr) {
System.out.print(num +
" ");
}
System.out.print("]");
System.out.println();
}
}
运行结果:
[90 12 23 15 -4 1 97 4 3 8 ]
[-4 1 3 4 8 12 15 23 90 97 ]
第9讲快速排序
相关文章推荐
- C++实现简单的希尔排序Shell Sort实例
- 使用Java实现希尔排序算法的简单示例
- 希尔排序的算法代码
- c语言实现冒泡排序、希尔排序等多种算法示例
- C++实现八个常用的排序算法:插入排序、冒泡排序、选择排序、希尔排序等
- JavaScript排序算法之希尔排序的2个实例
- JavaScript希尔排序、快速排序、归并排序算法
- Java实现八个常用的排序算法:插入排序、冒泡排序、选择排序、希尔排序等
- java高级排序之希尔排序
- java数组排序示例(冒泡排序、快速排序、希尔排序、选择排序)
- java 中基本算法之希尔排序的实例详解
- Java排序算法总结之希尔排序
- 细致解读希尔排序算法与相关的Java代码实现
- java 数据结构基本算法希尔排序
- 小蚂蚁学习数据结构(36)——插入排序中的希尔排序
- JavaScript希尔排序、快速排序、归并排序算法
- 简单实现希尔排序
- 排序算法 java版本
- 各种排序方法java实现
- 排序算法总结