希尔排序C语言实现

 2024-03-11 03:05:34  阅读 0

希尔排序的基本思想是:首先将整个待排序序列划分为若干个子序列,分别进行直接插入排序。 当整个待排序序列基本有序时,则对所有记录进行直接插入排序。 希尔排序也称为收缩增量排序,由于1959年提出。

希尔排序的具体实现方法和步骤:

A。 选择步骤序列 d1, d2, d3,..., dk,其中 di > dj, dk = 1;

b. 根据步骤序列数K对序列进行K次排序

C。 每次排序操作按照对应的步长di进行分组,即将待排序的记录序列中距离为di的所有记录放在同一组中。 这样就可以将待排序的序列分成若干个长度为m的子序列,对每组分别进行直接插入排序。 当dk=1时,整个序列被当作一个表来处理,表的长度就是整个序列的长度,整个排序就完成了。

具体希尔排序函数实现如下(按照逐渐递增排序):

/* 希尔排序算法的简单实现

* array[]: 待排序的数组

*:待排序数组的长度

* d[]:增量值数组

*:增量值的个数

*/

void (int array[], int, int d[], int)

整数 i、j、k、m;

整数跨度; // 用于存储具体的增量值

国际温度; // 用于存储要排序的元素的临时值

for(m = 0; m < ; m++)

跨度=d[m]; // 获取增量值

for(k = 0; k < 跨度; k++)

for(i = k; i < -1; i += 跨度)

临时=数组[i+1];

j = 我;

while((j > -1) && (temp < 数组[j]))

数组[j + 1] = 数组[j];

j——;

数组[j + 1] = 临时;

测试功能的实现如下:

/* 程序的入口函数*/

int main()

整数a[];

整数我;

int d[3] = {5, 3, 1}; //定义一个表示增量值的数组

/* 输入10个塑料元素*/

("输入%d:",);

for(i = 0; i < ; i++)

scanf("%d", &a[i]);

(“**************************************************** **************”);

/* 打印出排序前的所有元素*/

(“排序是:”);

for(i = 0; i< ; i++)

(“%d”,a[i]);

(“”);

(“**************************************************** **************”);

/* 直接插入元素从小到大排序 */

(a, , d, (d)/(d[0]));

/* 打印出所有已排序的元素*/

(“排序后是:”);

for(i = 0; i < ; i++)

(“%d”,a[i]);

(“”);

0;

【希尔排序(C语言实现)】相关文章:

希尔排序算法的C语言实现实例10-04

冒泡排序(C语言实现)10-04

简单选择排序(C语言实现)10-04

C语言实现归并排序算法示例11-21

排序一:直接插入排序(C语言实现)12-03

直接插入排序(C语言实现)10-06

C语言排序算法10-05

6种常见排序算法的C语言实现10-04

C语言冒泡排序算法示例11-21

标签: 排序 序列 希尔

如本站内容信息有侵犯到您的权益请联系我们删除,谢谢!!


Copyright © 2020 All Rights Reserved 京ICP5741267-1号 统计代码