您的位置:首页 > 编程语言 > C语言/C++

C语言各种排序算法

2017-07-16 10:20 183 查看
1、shell排序(希尔排序)

思想:把记录按下标的一定增量分组,对每组使用直接插入算法排序;随着增量逐渐减少,每组包含的关键字越来越多,当增量减少至1时,整个文件恰被分为一组,算法终止。

优点:直接插入排序的改进版。

(1)不需要大量的辅助空间;(2)时间复杂度与增量序列的选取有关,(希尔增量时间复杂度为O(n^2)),希尔排序的时间复杂度下限是O(n(log2n)),对于中等大小规模表现良好;(3)最坏情况和平均情况下执行效率相差不是很大,而快排在最坏情况下执行的效率会非常差。



希尔增量排序代码:

#include <stdio.h>

void shellsort(int array[], int len)
{
int dist; //distance
int i;
int j;
int temp;

for (dist = len / 2; dist > 0; dist /= 2)
{
for (i = dist; i < len; i++)
{
for (j = i - dist; (j >= 0) && (array[j] > array[j+dist]); j -= dist)
{
temp = array[j];
array[j] = array[j+dist];
array[j+dist] = temp;
}
//
//          if (array[i-dist] > array[i])  //(X)要注意:交换后,之前的顺序要保持正确。。。。。
//          {
//            temp = array[i-dist];
//            array[i-dist] = array[i];
//            array[i] = temp;
}
}
}
}

int main()
{
int i = 0;
int array[20] = {13, 5, 4, 1, 2, 9, 14, 11};

for (; i < 8; i++)
{
printf("%d\t", array[i]);
}
printf("\n");

shellsort(array, 8);

for (i = 0; i < 8; i++)
{
printf("%d\t", array[i]);
}
printf("\n");

return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: