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

监控直播网站开发/免费推广的方式

监控直播网站开发,免费推广的方式,wordpress旅游,企业网站建设合同书.doc一、希尔排序的介绍 希尔排序(Shell Sort)是插入排序的一种。也称缩小增量排序,是直接插入排序算法的一种更高效的改进版本。希尔排序是非稳定排序算法。 希尔排序是把记录按下标的一定增量分组,对每组使用直接插入排序算法排序;随着增量逐渐…

一、希尔排序的介绍

  希尔排序(Shell Sort)是插入排序的一种。也称缩小增量排序,是直接插入排序算法的一种更高效的改进版本。希尔排序是非稳定排序算法。 希尔排序是把记录按下标的一定增量分组,对每组使用直接插入排序算法排序;随着增量逐渐减少,每组包含的记录越来越多,当增量减至1时,整个文件恰被分成一组,算法便终止。  

二、希尔排序的原理

  在前面文章中介绍的直接插入排序,它对于已经基本有序的数据进行排序,效率会很高,而如果对于最初的数据是倒序排列的,则每次比较都需要移动数据,导致算法效率降低。

      希尔排序的基本思想就是:将需要排序的序列逻辑上划分为若干个较小的序列(但并非真的分割成若干分区),对这些逻辑上序列进行直接插入排序,通过这样的操作可使需要排序的数列基本有序,最后再使用一次直接插入排序。

      在希尔排序中首先要解决的是怎样划分序列,对于子序列的构成不是简单地分段,而是采取将相隔某个增量的数据组成一个序列。一般选择增量的规则是:取上一个增量的一半作为此次子序列划分的增量,一般初始值元素的总数量的一半。

三、希尔排序的图解 

 

四、希尔排序的python代码实现

# 创建一个希尔排序的函数
def shell_sort(alist):# 需要排序数组的个数N = len(alist)# 最初选取的步长gap = N//2# 根据每次不同的步长,对分组内的数据进行排序# 如果步长没有减为1就继续执行while gap>0:# 对每个分组进行插入排序,# 因为插入排序从第二个元素开始,而这里第二个元素的下标就是gap# 所以i的起始点是gapfor i in range(gap,N):# 控制每个分组内相邻的两个元素,逻辑上相邻的两个元素间距为gap,# j的前一个元素比它少一个gap距离,所以for循环中j的步长为 -gapfor j in  range(i,0,-gap):# 判断和逻辑上的分组相邻的两个数据大小if alist[j]<alist[j-gap] and j-gap>=0:# 交换temp = alist[j]alist[j] = alist[j-gap]alist[j-gap] = temp# 改变步长gap = gap//2numlist = [5,7,8,3,1,2,4,6,9]
print("排序前:%s"%numlist)
shell_sort(numlist)
print("排序后:%s"%numlist)

运行结果为:

排序前:[5, 7, 8, 3, 1, 2, 4, 6, 9]
排序后:[1, 2, 3, 4, 5, 6, 7, 8, 9]

五、希尔排序的C语言实现

#include <stdio.h>
// 创建一个希尔排序的函数
void shell_sort(int arr[],int arrLength,int gap)
{// 根据每次不同的步长,对分组内的数据进行排序// 如果步长没有减为1就继续执行while (gap>0){// 对每个分组进行插入排序,// 因为插入排序从第二个元素开始,而这里第二个元素的下标就是gap,// 所以i的起始点是gapfor (int i = gap; i<arrLength; i++){// 控制每个分组内相邻的两个元素,逻辑上相邻的两个元素间距为gap,// j的前一个元素比它少一个gap距离,所以for循环中j每次减少一个gap// 因为j-gap是上一个元素的下标,也必须保证大于等于0for (int j = i; j>0&&j-gap>=0; j=j-gap){// 判断和逻辑上的分组相邻的两个数据大小if (arr[j]<arr[j-gap]){// 交换int temp = arr[j];arr[j] = arr[j-gap];arr[j-gap] = temp;}}}gap = gap/2;}
}int main(int argc, const char * argv[]) {// 定义数组int array[] = {5,7,8,3,1,2,4,6,9};// 希尔排序的声明void shell_sort(int arr[],int arrLength,int gap);// 计算数组长度int len = sizeof(array)/sizeof(int);// 制定gap为二分之一的长度int g = len/2;// 使用希尔排序
    shell_sort(array, len, g);// 验证for (int i = 0; i<len; i++){printf("%d ",array[i]);}return 0;
}

运行结果为:

1 2 3 4 5 6 7 8 9

 

六、希尔排序的时间复杂度

  • 最优时间复杂度:根据步长序列的不同而不同
  • 最坏时间复杂度:O(n2)

七、希尔排序的稳定性

  由于多次插入排序,我们知道一次插入排序是稳定的,不会改变相同元素的相对顺序,但在不同的插入排序过程中,相同的元素可能在各自的插入排序中移动,最后其稳定性就会被打乱,所以shell排序是不稳定的。

 

转载于:https://www.cnblogs.com/Se7eN-HOU/p/11079526.html

http://www.jmfq.cn/news/4909915.html

相关文章:

  • 免费永久网站建设/百度搜索广告价格
  • 做旅游景点网站的目的和意义/seo平台优化
  • 做搜狗pc网站优/什么是搜索引擎销售
  • sql做网站/关键词seo优化软件
  • asp.net mvc 做网站/外贸推广平台排名
  • 网站建设开发文档/上海快速排名优化
  • 做界面的网站/廊坊seo快速排名
  • 注册域名成功后怎样建设网站/百度引擎搜索入口
  • 做网站怎么插入表格/seo课
  • 做商城类网站备案时需提供什么证件/网站是怎么建立起来的
  • 阳狮做网站/老师直播课
  • 郑州网站微信微博维护/宁波seo推广推荐公司
  • 网站做聚合是啥意思/扬州百度推广公司
  • html做网站怎么链接音乐/搜索引擎营销特点
  • 北京3d效果图制作公司/seo快速排名是什么
  • 浙江网站怎么做推广/深圳最新消息今天
  • 网站做代理需要空间是多少钱/百度网盘app下载安装 官方下载
  • 合肥高端网站建设工作室/沈阳seo关键字优化
  • 帮人做ppt的网站/互联网销售可以卖什么产品
  • 有没有做任务赚钱网站/网站关键词公司
  • 怎么做相册的网站/成都seo培训
  • 最近做网站开发有前途没/sem专员
  • 建站方案书/seo概念
  • wordpress $wpdb->escape/网站seo优化是什么
  • 湖南易图做推广送网站/怎样在平台上发布信息推广
  • 怎么查出这个网站是谁做的/sem优化软件选哪家
  • 做家装图接单网站/学电脑培训班
  • 游学做的好的网站/pc网站优化排名软件
  • 网站建设的付款方式/合肥seo网站排名
  • 济南建设网站/百度信息流广告推广