由于考试耽搁了几天,不好意思~~~

前面的介绍的三种排序算法,都属于简单排序,大家能够看下详细算法,时间复杂度基本都在0(n^2),这样呢,非常多计算机界、数学界的牛人就非常不爽了,他们在家里想啊想,吃饭的时候在想,窝粑粑的时候也在想,到底能不能把时间复杂度搞低点呢。最终,皇天不负有心人啊,王母娘娘显灵了,最终被DL. SHELL这哥们给想出来了。他所创造的希尔(shell)排序是世界上第一个打破0(n^2)的时间复杂度的算法。牛逼不?

好了,言归正传。

希尔排序:

希尔排序,也称递减增量排序算法,是插入排序的一种更高效的改进版本号。希尔排序是非稳定排序算法。



希尔排序是基于插入排序的下面两点性质而提出改进方法的:

(1) 插入排序在对差点儿已经排好序的数据操作时, 效率高, 即能够达到线性排序的效率

(2) 但插入排序一般来说是低效的, 由于插入排序每次仅仅能将数据移动一位

源码:

#include "stdafx.h"
#include <stdlib.h> void Shell_Sort()
{
int arr[10]; for ( int i=0; i<10; i++) //初始化数据
{
arr[i] = rand()%123; //随机生成数据
}
printf("Before sort:\n"); //打印排序前的数据
for (int i = 0; i < 10; i++)
{
printf("%d ",arr[i]);
} //開始排序
int k = 0;
int gap = 10; int temp = 0 ; //记录要插入的数据
do
{
gap = (gap / 3) + 1; //假定间隔为3,(3能够为其它数字)
for (int i = gap; i < 10; i+=gap) //从第二个一直比到最后一个元素,每次跳gap个间距
{
k = i;
temp = arr[k];
for (int j = i-gap; (j>=0)&&(arr[j] > temp); j-=gap)//从要插入的元素的上一个元素開始,一直往前,每次跳 //gap个元素直到要插入的元素遇到不比它大的 //元素为止
{
arr[j+gap] = arr[j];
k = j; //k的位置就是要插入的位置
}
arr[k] = temp; //将要插入的元素插到k的位置
}
}while(gap > 1); printf("\nAfter sort:\n"); //打印排序后的数据
for (int i = 0; i < 10; i++)
{
printf("%d ",arr[i]);
}
}
int _tmain(int argc, _TCHAR* argv[])
{
Shell_Sort(); printf("\n");
system("pause");
return 0;
}

执行结果:

Before sort:
41 17 61 55 104 103 39 84 25 110
After sort:
17 25 39 41 55 61 84 103 104 110
请按随意键继续. . .

如有错误,望不吝指出。

最新文章

  1. MongoDB学习笔记(数据操作)
  2. jenkins publish over ssh使用
  3. 最完美解决Nginx部署ThinkPHP项目的办法
  4. Runtime运行时学习(一)
  5. JavaScript apply函数小案例
  6. :after伪类+content内容生成经典应用举例
  7. nyoj 43 24 Point game(dfs暴力)
  8. app界面设计字体规范
  9. mysql 唯一索引与null.md
  10. nmcli配置ipv6
  11. 如何用Fiddler手机抓包
  12. dhcpsrv:windows系统的优秀开源免费dhcp serve软件
  13. Luogu P2661 [NOIP2015] 信息传递
  14. ORA-10858:在要求输入数字处找到非数字字符
  15. PHP多进程编之pcntl_fork的实例详解
  16. iPhone:动态获取UILabel的高度和宽度
  17. java 连接oracle 进行增删改查
  18. Flask:初见
  19. android viewHolder static 静态
  20. 火速提升Android仿真器的运行速度 ——仿真器Genymotion

热门文章

  1. HDU 4951 Multiplication table 阅读题
  2. 隐藏快捷方式扩展名(.lnk)
  3. 【Web探索之旅】第二部分第四课:数据库
  4. ReactJS学习 相关网站
  5. 【iOS发展-61】更换plist经过资源,执行iOS一旦数据仍显示在模拟器的外观,如何解决?
  6. Android - 支持不同的设备
  7. ASP.NET自定义控件组件开发 第一章 待续
  8. IIS7和IIS7.5备份和还原的方法
  9. MSMQ学习笔记
  10. .net与Java的WebService互调