排序算法——希尔排序
来源:互联网 发布:js 闭包的定义 编辑:程序博客网 时间:2024/06/05 01:21
希尔排序(Shell Sort)也称为递减增量排序算法,是插入排序的一种高速而安定的改良版。因希尔(Donald L. Shell)于1959年提出而得名。各种实现在如何进行递减上有所不同。
希尔排序是基于插入排序的以下两点性质而提出改进方法的:
插入排序在对几乎已经排好序的数据操作时, 效率高, 即可以达到线性排序的效率
但插入排序一般来说是低效的, 因为插入排序每次只能将数据移动一位
对有n个元素的可比较资料,先取一个小于n的整数d1作为第一个增量,把文件的全部记录分成d1个组。所有距离为d1的倍数的记录放在同一个组中。先在各组内进行直接插入排序;然后,取第二个增量d2<d1重复上述的分组和排序,直至所取的增量dt=1(dt<dt-1<…<d2<d1),即所有记录放在同一组中进行直接插入排序为止。
该方法实质上是一种分组插入方法。
在具体实现上,希尔排序的性能与所选取的分组长度序列有很大关系
- #include <stdio.h>
- void shell_sort(int a[], int size)
- {
- int gap, temp;
- int i, j;
- for (gap = size / 2;gap > 0; gap /= 2) {
- for (i = gap; i < size; i++) {
- for (j = i - gap; j >= 0 && a[j] > a[j+gap]; j-=gap) {
- temp = a[j];
- a[j] = a[j+gap];
- a[j+gap] = temp;
- }
- }
- }
- }
- main()
- {
- int a[] = {49, 38, 65, 97, 76, 13, 27, 49, 55, 4}, i;
- int size = sizeof(a) / sizeof(int);
- shell_sort(a, size);
- for (i = 0; i < size; i++)
- printf("%d ", a[i]);
- }
- 算法——希尔排序
- 算法 —— 希尔排序
- 算法——希尔排序
- java算法—希尔排序
- 算法排序———希尔排序
- 排序算法——希尔排序
- 经典算法排序——希尔排序
- 排序算法4——希尔排序
- 排序算法——希尔排序
- 排序算法——希尔排序
- 排序算法——希尔排序
- 排序算法系列——希尔排序
- 排序算法——希尔排序
- 排序算法——希尔排序
- 常用排序算法——希尔排序
- 数据结构排序算法——希尔排序
- 排序算法4——希尔排序
- 排序算法——希尔排序
- Java socket编程 猜数游戏--1--服务端
- Java Socket编程的一个秘密类
- first
- C#学习笔记
- SQL
- 排序算法——希尔排序
- 整数类型
- struts批量上传文件
- 12.6
- 如果你在郑州,去买老人一个气球吧
- 计算机公认端口大全
- Linux PK Windows ,Linux本轮胜出 (伦敦证券交易所将使用Linux )
- 赞美是一种礼物
- Java基础巩固