(十四)高级排序—希尔排序
来源:互联网 发布:一元云购源码是什么 编辑:程序博客网 时间:2024/06/09 22:45
一、希尔排序说明:
1. 希尔排序是由于计算机科学家Shell而得名,他在1959年发明了希尔排序算法。希尔排序是基于插入排序,增加了一些新的特性,提高了插入排序的效率。
2. 回顾以往我们的插入排序,会发现,如果一个最小的元素在最右端,进行插入排序时,将他取出放入临时变量,几乎所有的元素都要向右移动一位,效率会非常的低。而希尔排序正好对他进行了改进。
3. 希尔排序的原理是通过加大插入排序中元素之间的间隔,并在这些有间隔的元素中进行插入排序,从而使数据项能够大跨度的移动,当这些数据项排过一趟序之后,在减小间隔进行第二次排序,依次下去。进行排序时,数据项之间的间隔称为增量,用字母h表示。
二、Java语言描述希尔排序算法:
package com.solid.sort;
public class ShellSort {
//数组
private int[] arr;
//元素个数
private int nElems;
/**
* 构造方法
* @param maxSize
*/
public ShellSort(int maxSize) {
arr = new int[maxSize];
nElems = 0;
}
/**
* 插入元素
* @param key
*/
public void insert(int key) {
arr[nElems++] = key;
}
/**
* 希尔排序
*/
public void shellSort() {
int inner, outer;
int temp;
//找出h的初始值{1, 4, 13, 40, ......}
int h = 1;
while(h <= nElems/3) {
h = h*3 + 1;
}
while(h > 0) {
for(outer=h; outer<nElems; outer++) {
temp = arr[outer];
inner = outer;
while(inner > h-1 && arr[inner-h] >= temp) {
arr[inner] = arr[inner-h];
inner = inner - h;
}
arr[inner] = temp;
}
h = (h-1) / 3;
}
}
/**
* 打印数组中的所有元素
*/
public void display() {
for(int i=0; i<arr.length; i++) {
System.out.print(arr[i] + " ");
}
System.out.println();
}
/**
* 测试main方法
* @param args
*/
public static void main(String[] args) {
ShellSort shell = new ShellSort(10);
shell.insert(1);
shell.insert(3);
shell.insert(5);
shell.insert(7);
shell.insert(9);
shell.insert(2);
shell.insert(4);
shell.insert(6);
shell.insert(8);
shell.insert(10);
shell.display();
shell.shellSort();
shell.display();
}
}
- (十四)高级排序—希尔排序
- 高级排序--希尔排序
- 高级排序-希尔排序
- 高级排序算法--希尔排序
- 高级排序之希尔排序
- Java高级排序(希尔排序,快速排序,堆排序,归并排序,桶排序)
- Java数据结构和算法-高级排序(1-希尔排序)
- 排序—希尔排序
- 排序—希尔排序
- 排序(希尔排序)
- 高级排序算法之希尔排序
- 排序——希尔排序(C++)
- 排序(4)——希尔排序
- 数据结构之高级排序<希尔排序、快速排序>
- 排序——希尔排序
- 排序——希尔排序
- 排序——希尔排序
- 排序——希尔排序
- 数据结构之线性表--顺序结构测试
- 事件
- mysql免安装版配置与使用方法
- java基础学习心得
- 程序员,应该掌握的英语词汇
- (十四)高级排序—希尔排序
- 用于建档、报名的拍照摄像软件
- R6034问题的解决
- Working with Variants in Visual Basic
- September, 9(R)
- jQuery入门学习七:可编辑的表格
- Erlang的第一款IDE:Leix's Editor --基于wxErlang
- JS文档生成工具JSDoc
- 基于对话框的图片打开与显示