希尔排序
来源:互联网 发布:淘宝大促 编辑:程序博客网 时间:2024/06/13 23:29
希尔排序
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讲快速排序
- 希尔排序
- 希尔排序
- 希尔排序
- 希尔排序
- 希尔排序
- 希尔排序
- 希尔排序
- 希尔排序
- 希尔排序
- 希尔排序
- 希尔排序
- 希尔排序
- 希尔排序
- 希尔排序
- 希尔排序
- 希尔排序
- 希尔排序
- 希尔排序
- Session和cookie的区别(进行对比)
- WebView的简单使用
- leetcode 373 Find K Pairs with Smallest Sums java
- 迷宫问题Java版本实现
- 整数中1出现的次数(从1到n整数中1出现的次数)
- 希尔排序
- leetcode.368. Largest Divisible Subset
- servlet服务程序
- C语言标准库函数qsort排序的介绍与使用
- #Paper Reading# Bag of Tricks for Efficient Text Classification
- poj 2488 A Knight's Journey 水DFS
- 快速排序
- 阿里巴巴2017实习生笔试题+JAVA工程师能力评估部分题目
- jsp九大内置对象及其作用?