一 、Shell排序
Shell(希尔)排序是一种插入排序算法,它出自D.L.Shell,因此而得名。 Shell排序又称作缩小增量排序。 Shell排序的执行时间依赖于增量序列。
算法介绍
希尔排序是把记录按下标的一定增量分组,对每组使用直接插入排序算法排序;随着增量逐渐减少,每组包含的关键词越来越多,当增量减至1时,整个文件恰被分成一组,算法便终止。
先取一个小于n的整数d1作为第一个增量,把文件的全部记录分组。所有距离为d1的倍数的记录放在同一个组中。先在各组内进行直接插入排序;然后,取第二个增量d2<d1重复上述的分组和排序,直至所取的增量=1(<…<d2<d1),即所有记录放在同一组中进行直接插入排序为止。
Shell排序的一般流程
(1)将有n个元素的数组分成n/2个数字序列,第1个数据和第n/2+1个数据为一对,
(2) 一次循环使每一个序列对排好顺序。
(3)然后,再变为n/4个序列,再次排序。
(4)不断重复上述过程,随着序列减少最后变为一个,也就完成了整个排序。
代码实现
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
void shell_sort(int arr[],int n)
{
int gap, i, j, temp;
for(gap = n /