希尔排序-插入改进

引自:http://hi.baidu.com/gsgaoshuang/item/17a8ed3c24d9b1ba134b14c2

学习算法的一个好网站

http://student.zjzk.cn/course_ware/data_structure/web/paixu/paixu8.2.2.1.htm

希尔排序(Shell Sort)又称为缩小增量排序,输入插入排序算法,是对直接排序算法的一种改进。本文介绍希尔排序算法。

    对于插入排序算法来说,如果原来的数据就是有序的,那么数据就不需要移动,而插入排序算法的效率主要消耗在数据的移动中。因此可知:如果数据的本身就是有序的或者本身基本有序,那么效率就会得到提高。

    希尔排序的基本思想是:将需要排序的序列划分成为若干个较小的子序列,对子序列进行插入排序,通过则插入排序能够使得原来序列成为基本有序。这样通过对较小的序列进行插入排序,然后对基本有序的数列进行插入排序,能够提高插入排序算法的效率。

    在希尔排序中首先解决的是子序列的选择问题。对于子序列的构成不是简单的分段,而是采取相隔某个增量的数据组成一个序列。一般的选择原则是:去上一个增量的一般作为此次序列的划分增量。首次选择序列长度的一般为增量。

    先假如:数组的长度为10,数组元素为:25,19,6,58,34,10,7,98,160,0

        整个希尔排序的算法过程如下如所示:



上图是原始数据和第一次选择的增量 d = 5。本次排序的结果如下图:

 

 

上图是第一次排序的结果,本次选择增量为 d=2。 本次排序的结果如下图:

当d=1 是进行最后一次排序,本次排序相当于冒泡排序的某一次循环。最终结果如下:

在实际使用过程中,带排序的数据肯定不是只有十个,但是上述是希尔排序的思想。其实希尔排序只是插入排序的一种优化。

希尔排序的整个流程如下图所示:假设带排序的数据结构为整型数组 A[n] 数组长度为 n

 

C++实现希尔排序的代码如下所示:

// ShellSort.cpp : Defines the entry point for the console application.

//

 

#include "stdafx.h"

#include <iostream>

 

using namespace std;

 

void Display(int array[],int length);

 

void ShellSort(int array[],int length);

 

int main(int argc, char* argv[])

{

         int arr[10] = {25,19,6,58,34,10,7,98,160,0};

         Display(arr,10);

 

         ShellSort(arr,10);

 

         Display(arr,10);

         system("pause");

         return 0;

}

 

//输出数组

void Display(int array[],int length)

{

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

         {

                   cout<<array[i]<<", ";

         }

         cout<<endl;

}

 

//希尔排序算法的实现

void ShellSort(int array[],int length)

{

         int d = length/2;   //设置希尔排序的增量

         int i ;

         int j;

         int temp;

         while(d>=1)

         {

                   for(i=d;i<length;i++)

                   {

                            temp=array[i];

                            j=i-d;

                            while(j>=0 && array[j]>temp)

                            {

                                     array[j+d]=array[j];

                                     j=j-d;

                            }

//不明白为何要-d,循环出来之后又+d,不是多此一举 啊

                            array[j+d] = temp;

                   }

                   Display(array,10);

                   d= d/2;    //缩小增量

         }

}

 

/*

希尔排序是对插入排序的一种改进。该算法思路和代码都比较复杂。以上代码在VC 6.0 中成功运行

*/

 

 

转载于:https://www.cnblogs.com/fickleness/p/3339008.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/493789.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

机器学习实战之决策树

你是否玩过二十个问题的游戏,游戏的规则很简单:参与游戏的一方在脑海里想某个事物,其他参与者向他提问题,只允许提20个问题,问题的答案也只能用对或错回答。问问题的人通过 推断分解,逐步缩小待猜测事物的范围。决策树的工作原理与20个问题类似,用户输人一系列数 据,然后给出游…

2018全球硬科技创新暨“一带一路”创新合作大会,这些硬科技都要来!

来源&#xff1a;新华社近年来&#xff0c;多个省市陆续开始了一场科技标签秀&#xff0c;以深圳等为代表的“人工智能”、以上海为代表的“金融科技”&#xff0c;以贵州为代表的“大数据”等纷纷亮相&#xff0c;而伴随着“一带一路”新丝路的战略实施&#xff0c;西安&#…

吴恩达:人工智能寒冬不会到来,但我们太乐观了

来源&#xff1a;量子位AI Winter Is Coming&#xff1f;人工智能领域的各路专家学者曾经为这个话题吵翻了天。最近&#xff0c;这个话题又有更新了。人工智能寒冬论的作者Filip Piekniewski在博客上发文&#xff0c;给自己提出的观点增加了新的证据。非常巧的是&#xff0c;吴…

自动驾驶中常用的四类机器学习算法

来源&#xff1a;智车科技机器学习算法已经被广泛应用于自动驾驶各种解决方案&#xff0c;电控单元中的传感器数据处理大大提高了机器学习的利用率&#xff0c;也有一些潜在的应用&#xff0c;比如利用不同外部和内部的传感器的数据融合(如激光雷达、雷达、摄像头或物联网)&…

国际基因编辑科技发展报告

来源&#xff1a;全球技术地图作者&#xff1a;贾晓峰 中国科学技术信息研究所摘要&#xff1a;以特异性的改变遗传物质靶向基因序列为目标的基因编辑技术是近年生命科学领域最热门的研究领域之一。围绕基因编辑的相关领域研究和人物事件连续多年入选Nature国际科学事件和科学人…

科学家发现大脑动态评估信息重要性机制

大脑中部的丘脑室旁核&#xff08;PVT&#xff09; 图片来源&#xff1a;中科院深圳先进技术研究院来源&#xff1a;中国科学报周末该在家看书还是出去K歌&#xff1f;寒冬将至&#xff0c;该坚持健身还是涮个火锅&#xff1f;每天&#xff0c;人们都会面临上百种选择。以往&am…

腾讯AI Lab研发「智能显微镜」 抢先布局病理分析领域

来源&#xff1a;腾讯AI实验室腾讯 AI Lab 在南京举办的「腾讯全球合作伙伴大会」上宣布&#xff0c;其AI医疗领域研究已抢先从影像筛查进入病理分析阶段&#xff0c;相关的「智能显微镜」项目已在研发测试阶段。智能显微镜融入了人工智能&#xff08;AI&#xff09;的视觉、语…

石墨烯新新新应用,MIT大规模生产细胞大小机器人,有感知能存储

&#xff08;MIT开发的微型机器人&#xff09;来源&#xff1a;机器人大讲堂近期&#xff0c;MIT又玩出了新花样&#xff0c;在前几个月成功开发出细胞大小并且能够感知外部环境、储存数据并执行计算任务的微型机器人后&#xff0c;MIT又带来了新消息&#xff1a;他们为大规模生…

多种图像配准方法的综合比较(KAZE、SIFT、SURF等)

接触图像配准是从去年十月份开始的&#xff0c;老师要求我尽快重现一遍整个流程&#xff0c;这样对课题可以有一个整体的把握&#xff0c;而后再仔细推敲细节&#xff0c;甚至提出自己的想法&#xff0c;老师的这个思路现在觉得非常不错。自己当时选取的是SURF方法&#xff0c;…

全面梳理百度世界大会:量产L4乘用车和两款音箱 还有挖掘机技术

来源&#xff1a;网易智能摘要&#xff1a;今天&#xff0c;百度一年一度的世界大会如约而至&#xff0c;李彦宏宣布发布量产红旗L4级乘用车&#xff0c;推出两款小度语音智能产品和智能城市“ACE计划”。多年以来&#xff0c;百度世界大会和AI开发者大会成为百度对外的窗口&am…

图像处理中的通信原理——冈萨雷斯读书笔记(一)

信息的概念在信息论中很明确&#xff1a;用于衡量事件的不确定性。信息的传播形式或者所载体便是信号&#xff0c;比如说电信号、光信号、声音信号。那么信息的表现形式就是消息&#xff0c;可以是语言、文字、图像。所以说图像处理依然是信息与通信领域的一部分。它可以看作是…

【转载】贝叶斯决策论

原文链接&#xff08;http://www.cnblogs.com/elaron/archive/2012/10/29/2745010.html&#xff09; 1、什么是行为&#xff1f; 但是&#xff0c;有时候&#xff0c;后验概率本身只能说明具有特征x的样本属于ωi类的可能性有多少&#xff0c;却没能表示如果将样本分到ωi类时的…

李彦宏:人工智能会让这个世界变得更美好吗?YES AI DO!

来源&#xff1a;亿欧摘要&#xff1a;李彦宏表示&#xff0c;今天我们让公园充满AI&#xff0c;未来我们会让整个世界充满AI。11月1日&#xff0c;在百度世界大会上&#xff0c;李彦宏围绕人工智能是否能让这个世界变得更美好开展演讲&#xff0c;并且结合系列百度新近推出的产…

听说你盗图都盗绿了?

知乎传送门&#xff1a;https://www.zhihu.com/question/29355920 为什么图片反复压缩后会普遍会变绿而不是其他颜色&#xff1f;这是大神做的模拟迭代压缩的测试&#xff1a;https://m13253.github.io/JPEGreen/。排名第一的回答已经很仔细了&#xff0c;关于图像压缩不是很懂…

邬贺铨院士:十问边缘计算!

来源&#xff1a;通信世界网随着5G、物联网等的发展&#xff0c;边缘计算已经成为通信技术的又一制高点。目前边缘计算技术的研究已经取得了系列的成果&#xff0c;应用推广已逐步开展&#xff0c;但在今日举行的2018边缘计算技术峰会上&#xff0c;中国工程院院士、中国互联网…

图像处理中的通信原理——冈萨雷斯读书笔记(二)

参考伯乐在线的一篇文章&#xff0c;做图像的傅里叶变换。在PyCharm中安装cv2时出错&#xff0c;如下图&#xff1a;根据提示建议在命令行中执行命令pip install cv2也依然是No matching distribution found for cv2.注意到pip可以更新&#xff0c;但这不是问题所在。然而&…

图像处理中的通信原理——冈萨雷斯读书笔记(三)

法国数学家傅里叶男爵在1822年出版的《热分析理论》一书中指出&#xff0c;任何周期函数都可以表示为不同频率的正弦和或余弦和&#xff08;每个正弦项/余弦项乘不同的系数&#xff09;的形式&#xff0c;这其实就是无穷级数的一种&#xff1a;傅里叶级数。无穷级数的思想是通过…

腾讯俞栋:定义下一代智能人机交互,从目标、挑战到实现路径

来源&#xff1a;腾讯AI实验室语音识别及深度学习领域专家、腾讯AI Lab副主任及西雅图实验室负责人俞栋博士&#xff0c;在2018年腾讯全球合作伙伴大会上展示了腾讯AI正在推进的跨领域前沿研究&#xff1a;下一代的多模态智能人机交互。以下是有补充的演讲全文&#xff0c;介绍…

图像处理中的通信原理——冈萨雷斯读书笔记(四)

完美重建要求使用无限求和来内插&#xff0c;实践中&#xff0c;不得不寻求某种近似。在图像处理中&#xff0c;二维内插最普通的应用就是调整图像的大小。放大可看成是过取样&#xff0c;缩小是欠取样。无论是过取样还是欠取样&#xff0c;都需要内插&#xff0c;内插有最近邻…

unity3d游戏开发(一)——圈圈叉叉

参考&#xff1a;http://game.ceeger.com/forum/read.php?tid1719 ———————————————————开始————————————— 好吧&#xff0c;吹了那么多我们开始吧&#xff0c;先发个最终截图 当然&#xff0c;你觉得3个格子太少&#xff0c;你还可以扩展成任…