C++实现简单的希尔排序Shell Sort实例
本文以实例形式讲述了基于C++实现简单的希尔排序Shell Sort的方法,是一个很经典的算法,具体实现代码如下:
#include <iostream> using namespace std; void ShellSort(int* iArray,int length) { //初始化jump等于length int jump = length; //标记本趟检测是否进行了交换, // 若进行了 则还有下次从头开始的检测, // 否则停止,继续改变jump的值 做另一趟排序 bool isSwap; while(jump != 0) { //jump每次/2 jump = jump / 2; do{ int i = 1; //初始化表示没有进行交换 isSwap = false; while( i <= length - jump) { if(iArray[i] > iArray[i+jump]) { int temp = iArray[i]; iArray[i] = iArray[i+jump]; iArray[i+jump] = temp; isSwap = true; } i++; } }while(isSwap == true);//如果进行了交换说明 增量为jump的序列 //可能存在不是有序的 在检测一遍 //否则说明增量为jump的序列是有序的 } } int main() { int iArray[] = {0,50,123,36,25,200,36,95,70,14,10,321,1,3,5,8}; ShellSort(iArray,15); for(int i = 1; i <= 15; i++) { cout<<iArray[i]<<" "; } cout<<endl; return 0; }
相关推荐
-
C++ 算法之希尔排序详解及实例
C++ 算法之希尔排序算法详解及实例 希尔排序算法 定义: 希尔排序是插入排序的一种,也称缩小增量排序,是直接插入排序算法的一种更高效的改进版本. 算法思想: 希尔排序是把记录按下标的一定增量分组,对每组使用直接插入排序算法排序,随着增量逐渐减少,每组包含的关键词越来越多,当增量减至1时,整个文件恰好被分为一组,算法终止. 时间复杂度: O(N) 空间复杂度: O(1) 性能: 希尔排序为不稳定算法(一次插入排序是稳定的,不会改变相同元素的相对顺序,但是在不同的插入排序中,相同的元素可能在各自的
-
C++实现八个常用的排序算法:插入排序、冒泡排序、选择排序、希尔排序等
本文实现了八个常用的排序算法:插入排序.冒泡排序.选择排序.希尔排序 .快速排序.归并排序.堆排序和LST基数排序 首先是算法实现文件Sort.h,代码如下: /* * 实现了八个常用的排序算法:插入排序.冒泡排序.选择排序.希尔排序 * 以及快速排序.归并排序.堆排序和LST基数排序 * @author gkh178 */ #include <iostream> template<class T> void swap_value(T &a, T &b) { T t
-
C++实现简单的希尔排序Shell Sort实例
本文以实例形式讲述了基于C++实现简单的希尔排序Shell Sort的方法,是一个很经典的算法,具体实现代码如下: #include <iostream> using namespace std; void ShellSort(int* iArray,int length) { //初始化jump等于length int jump = length; //标记本趟检测是否进行了交换, // 若进行了 则还有下次从头开始的检测, // 否则停止,继续改变jump的值 做另一趟排序 bool is
-
PHP排序算法之希尔排序(Shell Sort)实例分析
本文实例讲述了PHP排序算法之希尔排序(Shell Sort).分享给大家供大家参考,具体如下: 基本思想: 希尔排序是指记录按下标的一定增量分组,对每一组使用 直接插入排序 ,随着增量逐渐减少,每组包含的关键字越来越多,当增量减少至 1 时,整个序列恰好被分成一组,算法便终止. 操作步骤: 先取一个小于 n(序列记录个数) 的整数 d1 作为第一个增量,把文件的全部记录分组.所有距离为 d1 的倍数的记录放在同一个组中.先在各组内进行 直接插入排序:然后,取第二个增量 d2 < d1 重复上述
-
浅析java 希尔排序(Shell)算法
先取一个小于n的整数d1作为第一个增量,把文件的全部记录分成d1个组.所有距离为dl的倍数的记录放在同一个组中.先在各组内进行直接插入排序:然后,取第二个增量d2<d1重复上述的分组和排序,直至所取的增量dt=1(dt<dt-l<:-<d2<d1),即所有记录放在同一组中进行直接插入排序为止. 该方法实质上是一种分组插入方法. 原理图: 源代码 复制代码 代码如下: package com.zc.manythread; /** * * @author 偶my耶 * *
-
PHP排序算法之简单选择排序(Simple Selection Sort)实例分析
本文实例讲述了PHP排序算法之简单选择排序(Simple Selection Sort).分享给大家供大家参考,具体如下: 基本思想: 通过 n - i 次关键字间的比较,从 n - i + 1 个记录中选出关键字最小的记录,并和第 i (1 <= i <= n) 个记录交换,执行n-1趟 后就完成了记录序列的排序. 算法实现: <?php //简单选择排序 //交换函数 function swap(array &$arr,$a,$b){ $temp = $arr[$a]; $a
-
PHP排序算法之直接插入排序(Straight Insertion Sort)实例分析
本文实例讲述了PHP排序算法之直接插入排序(Straight Insertion Sort).分享给大家供大家参考,具体如下: 算法引入: 在这里我们依然使用<大话数据结构>里面的一个例子: 扑克牌是我们几乎每个人都玩过的游戏.平时我们开始的时候一般都是一个人发牌,其他人都是一边摸牌,一边理牌,假如你摸上的第一张牌是 5,第二张牌是 3,自然而然的我们把 3 插到 5 的前面:第三张牌是 4,查到 3 和 5 的中间:第四张牌是 6,放到 5 的后面:第五张牌是 2,插到 3 的前面:--.最
-
PHP排序算法之归并排序(Merging Sort)实例详解
本文实例讲述了PHP排序算法之归并排序(Merging Sort).分享给大家供大家参考,具体如下: 基本思想: 归并排序:就是利用归并(合并)的思想实现的排序方法.它的原理是假设初始序列含有 n 个元素,则可以看成是 n 个有序的子序列,每个子序列的长度为 1,然后两两归并,得到 ⌈ n / 2⌉ (⌈ x ⌉ 表示不小于 x 的最小整数)个长度为 2 或 1 的有序序列:再两两归并,······,如此重复,直至得到一个长度为 n 的有序序列为止,这种排序方法就成为 2 路归并排序. 一.归并
-
PHP排序算法之基数排序(Radix Sort)实例详解
本文实例讲述了PHP排序算法之基数排序(Radix Sort).分享给大家供大家参考,具体如下: 基数排序在<大话数据结构>中并未讲到,但是为了凑齐八大排序算法,我自己通过网络学习了这个排序算法,并给大家分享出来. 基本思想: 基数排序(radix sort)属于"分配式排序"(distribution sort),又称"桶子法"(bucket sort)或bin sort,顾名思义,它是透过键值的部份资讯,将要排序的元素分配至某些"桶&quo
-
用Java实现希尔排序的示例
一.理论准备 希尔排序(Shell Sort)是插入排序的一种,是针对直接插入排序算法的改进,是将整个无序列分割成若干小的子序列分别进行插入排序,希尔排序并不稳定.该方法又称缩小增量排序,因DL.Shell于1959年提出而得名.基本思想:先取一个小于n的整数d1作为第一个增量,把文件的全部记录分成d1个组.所有距离为d1的倍数的记录放在同一个组中.先在各组内进行直接插入排序:然后,取第二个增量d2<d1重复上述的分组和排序,直至所取的增量dt=1(dt<dt-l<-<d2<
-
Java 插入排序之希尔排序的实例
Java 插入排序之希尔排序的实例 Java代码 /*希尔排序(Shell Sort)是插入排序的一种.其基本思想是:先取定一个小于n的整数d1作为第一个增量,把文件的全部记录分成d1 * 个组,所有距离为d1的倍数的记录放在同一个组中,在各个组中进行插入排序:然后,取第二个增量d2<d1,重复上述的分组和排序, * 直至所取的增量dt=1(dt<dt-1<...<d2<d1),即所有记录放在同一组中进行直接插入排序为止. * new int[]{8,5,1,7,9,4,6}
-
Java经典排序算法之希尔排序详解
一.希尔排序(Shell Sort) 希尔排序(Shell Sort)是一种插入排序算法,因D.L.Shell于1959年提出而得名. Shell排序又称作缩小增量排序. 二.希尔排序的基本思想 希尔排序的中心思想就是:将数据进行分组,然后对每一组数据进行排序,在每一组数据都有序之后,就可以对所有的分组利用插入排序进行最后一次排序.这样可以显著减少交换的次数,以达到加快排序速度的目的. 希尔排序的中心思想:先取一个小于n的整数d1作为第一个增量,把文件的全部记录分成d1个组.所有距离为dl的倍数
随机推荐
- 链接渐变效果
- JavaScript 面向对象与原型
- linux shell 正则表达式(BREs,EREs,PREs)差异比较
- javascript 动态脚本添加的简单方法
- Mac上Oracle数据库的安装及过程中一些问题的解决
- Windows管理脚本学习
- java面试常见问题之Hibernate总结
- Oracle中插入特殊字符:&和'的解决方法汇总
- c# Random快速连续产生相同随机数的解决方案
- Asp.net,C# 加密解密字符串的使用详解
- php zend解密软件绿色版测试可用
- C语言实现动态顺序表的实现代码
- MySQL防止delete命令删除数据的两种方法
- Python中的异常处理简明介绍
- Python实现一个简单的MySQL类
- Android发送短信功能代码
- struts升级到2.5.2遇到的问题及解决方案(推荐)
- java 验证用户是否已经登录与实现自动登录方法详解
- WinForm 自动完成控件实例代码简析
- activemq整合springboot使用方法(个人微信小程序用)