当前位置: 首页 > news >正文

深圳手机集团网站建设h5源码下载

深圳手机集团网站建设,h5源码下载,淄博做网站建设公司,asp.net搭建网站引言 排序在我们生活中十分常见,无论是购物软件中的商品推荐还是名次、排名都与排序算法息息相关。希尔排序是排序中较快的一种,而希尔排序实现的基础是插入排序。 排序的实现 插入排序(以升序为例) 插入排序的原理是从第二个数…

引言

        排序在我们生活中十分常见,无论是购物软件中的商品推荐还是名次、排名都与排序算法息息相关。希尔排序是排序中较快的一种,而希尔排序实现的基础是插入排序。

排序的实现

插入排序(以升序为例)

        插入排序的原理是从第二个数开始,与前面的数相比较,如果比前面的数大,则与其交换,并且此移动过程会一直持续直到前k(k为此次刚开始移动的数的位置)个数达到有序为止;否则不会移动。代码如下:

void InsertSort(int* a, int n)
{for (int i = 0; i < n - 1; i++){int end = i;int tmp = a[end + 1];while (end >= 0){if (tmp < a[end]){a[end + 1] = a[end];--end;}else{break;}}a[end + 1] = tmp;}}

        我们将一直要改变的那个数设为tmp,将它与前面的数(end)比较,如果tmp较小,则进行交换,先将啊a[end] 覆盖a[end + 1],再--end达到tmp继续与前一个数比较的效果,最后达到效果.

希尔排序

希尔排序分为两步:预排序与插入排序.

预排序

预排序的目的是先让数组接近有序,将所有数据分为gap组,其代码与插入排序十分类似。

以该图为例,改预排序的流程是5与9比较,如果比9小,则将9放到原来5的位置,

再将8与9相比较并与5比较,8比9小,再将9放到8的位置,8比5大,所以再停止

最后将最后的5进行排序即可.

再嵌套一层循环使其达到排三组循环的效果

9--5--8--5

1--7--6

2--4--3

代码如下:

void ShellSort(int* a, int n)
{int gap = 3;for (int j = 0; j < gap; j++){for (int i = 0; i < n - gap; i += gap){int end = i;int tmp = a[end + gap];while (end >= 0){if (tmp < a[end]){a[end + gap] = a[end];end -= gap;}else{break;}}a[end + gap] = tmp;}}
}

 我们也可以只用两层循环实现,即分组排序的顺序改为

9--5,1--7,2--4,5--8,7--6,4--3,8--5.,实现代码如下:

//Shell排序的双层循环的写法void ShellSort(int* a, int n)
{int gap = 3;for (int i = 0; i < n - gap; i++){int end = i;int tmp = a[end + gap];while (end >= 0){if (tmp < a[end]){a[end + gap] = a[end];end -= gap;}else{break;}}a[end + gap] = tmp;}
}
总排序

gap一般取整个数组的数量除以三,为保证最后一次一定是1,我们将其设为gap = gap / 3 +1,这样最后就可以由一个插入排序对预排序后的数组进行总排序.并且我们每次预排序都会使数组更加有序,代码如下:

void ShellSort(int* a, int n)
{int gap = n;while (gap > 1){gap = gap / 3 + 1;for (int i = 0; i < n - gap; i++){int end = i;int tmp = a[end + gap];while (end >= 0){if (tmp < a[end]){a[end + gap] = a[end];end -= gap;}else{break;}}a[end + gap] = tmp;}}
}

希尔排序的速度

在release环境下,测试100,000个数据,其结果如下:

我们发现,希尔排序的速度是与堆排序是一个数量级的,而插入排序的速度也是比冒泡排序要快一个量级的.

测试1,000,000个数据

测试10,000,000个数据

堆排序的时间复杂度是O(n\log n),所以希尔排序的速度算是非常快的,有实践意义。

希尔排序的时间复杂度是 O(n^{1.3}).

http://www.yayakq.cn/news/966297/

相关文章:

  • 网站开发培训哪里好万户做网站如何
  • 河北廊坊百度建站轻松学做网站
  • 哪个网站做长图免费转高清图片cute wordpress主题破解版
  • 时尚类网站建设那些网站用不着做优化
  • 网站开发国内外现状研究园区做网站的好处
  • 全球排名前十网站做的好的营销型网站有哪些
  • 毕业设计做网站用php好吗金塔精神文明建设网站
  • seo怎么做网站内容wordpress插件云采集
  • 松岗营销型网站建设网站开发 属于研发费用吗
  • 夫妻找做伙食饭工作哪个网站好崇左市城市投资建设有限公司网站
  • 网站相册优化自己建立网站多少钱
  • 做示意图的网站深圳网站定制开发
  • 百度云搜索引擎入口seo提权软件
  • 做ag视频大全网站中石化网站群建设
  • 如何建 网站全国购网站建设
  • 网站备案的流程屏蔽ip网站吗
  • 备案网站转入阿里云商标注册查询一览表
  • 深圳app网站设计可信网站可信站点
  • 网站推广与优化平台电子商务网站建设与管理相关论文
  • 站长如何做导航网站网站备案法规
  • ssh购物网站开发视频网站开发和广告制作
  • 重庆网站建设哪里比较好呢江西做网站的公司
  • 注册自己的网站怎么注青岛的互联网公司排名
  • 页游做的好的是哪个网站网站建站工具有哪些
  • 湖北省工程建设协会网站建网站中企动力最行
  • 网站空间查询工具新建网站功能模块
  • 网站开发学习流程图建站平台和网站建设的区别
  • 怎样做网站不花钱网站网站制作怎么样
  • 淄博网站建设卓迅图书馆网站建设情况总结
  • 做网站需要会编程吗迁安市住房和城乡建设局网站