希尔排序
2017-12-01 23:29
141 查看
#include <stdio.h> void ShellSort(int array[], int length) { int i, j; int h; int temp; for (h = length / 2; h > 0; h = h / 2)//步长变化 { for (i = h; i < length; i++) { temp = array[i]; for (j = i - h; j >= 0; j -=h) { if (temp < array[j]) { array[j + h] = array[j]; } else { break; } } array[j + h] = temp;//for循环后 j-步长这时候下标要加回 } } } int main() { int i = 0; int a[] = {0, 5, 2, 4, 3, 1, 7, 6, 8, 9}; int length = sizeof (a) / sizeof(a[0]); ShellSort(a, length); for (i = 0; i < length; i++) { printf("%d ", a[i]); } printf("\n"); return 0; }
希尔排序也称为“缩小增量排序”,基本原理是:首先将待排序的元素分为多个子序列,使得每个子序的元素个数相对较少,对各个子序分别进行直接插入排序,待整个待排序序列“基本有序后”,再对所有元素进行一次直接插入排序。
具体步骤如下:
(1)选择一个步长序列t1, t2, ..., tk,满足ti >tj(i <j),tk = 1。
(2)按步长序列个数k,对待排序序列进行k趟排序。
(3)每趟排序,根据对应的步长ti,将待排序的序列分割成ti个子序列,分别对各个子序列进行直接插入排序。
相关文章推荐
- 希尔排序
- 数据结构 - 希尔排序(Shell's Sort) 详解 及 代码(C++)
- 排序算法(四)希尔排序
- #排序算法#【2】直接插入排序、希尔排序
- [数据结构]插入排序与希尔排序
- 希尔排序
- 七大内部排序算法总结(插入排序、希尔排序、冒泡排序、简单选择排序、快速排序、归并排序、堆排序)
- C语言8种排序算法及其实现 1.希尔排序 2.二分插入法 3.直接插入法 4.带哨兵的直接排序法 5.冒泡排序 6.选择排序 7.快速排序 8.堆排序
- 希尔排序的实现
- C++实现直接插入排序,折半插入排序,希尔排序,冒泡排序,简单选择排序,快速排序,堆排序
- 排序算法总结之希尔排序
- 希尔排序
- 希尔排序
- 白话经典算法系列之三 希尔排序的实现
- 【数据结构与算法】【排序】希尔排序的代码实现
- 【ShellSort】希尔排序
- PHP数据结构(5)希尔排序及其时间复杂度
- 希尔排序
- [算法] 希尔排序 Shell Sort
- 排序算法(一)-希尔排序