排序之希尔排序(Shell Sort)
来源:互联网 发布:mac怎么从u盘启动 编辑:程序博客网 时间:2024/05/22 12:25
希尔排序(Shell Sort):又叫缩小增量排序,该方法是直接插入排序的改进,其实质就是分组直接插入排序;
我们还记得直接插入排序对基本有序的序列排序时,效率很高;由此思想得出希尔排序;
基本思想:
先将待排序序列分成若干个子序列(由相距同等增量的元素组成),然后分别对分组序列进行直接插入排序;
缩小增量,依据增量再次分组排序。待到整个序列基本有序时,整体进行直接插入排序;
算法操作步骤:
1)选择某一增量序列:gap1 , gap2......gapk,其中gapi > gapj,gapk = 1;
2)按照给定增量序列个数K,需要进行K趟排序;
3)每趟排序中,根据给定增量gapi,将序列分成程度为m的不同子序列,对子序列进行直接插入排序;
算法实现:
#include<iostream>using namespace std;//-------------------------------------------------------希尔排序 --------------------------------------------------------------------------void ShellSort_Soulation1(int* data , int dLength){if(data == NULL ||dLength <= 0)return;int i , j , gap;//gap 步长for(gap = dLength / 2; gap > 0; gap /= 2)for(i = 0; i < gap; i++){//小组插入排序for(j = i + gap; j < dLength; j += gap){if(data[j] < data[j - gap]){int temp = data[j];int k = j - gap;while(k >=0 && data[k] > temp){data[k + gap] = data[k]; k -= gap;}data[k + gap] = temp;}}}}void ShellSort_Soulation2(int* data , int dLength){if(data == NULL || dLength <= 0)return;int i , j , gap;for(gap = dLength / 2; gap > 0; gap /= 2)for(i = gap; i < dLength; i++)for(j = i - gap; j >= 0 && data[j] > data[j + gap]; j -= gap)//数据交换代替数据依次后移,会简洁些;swap(data[j] , data[j + gap]);}
- 排序之希尔排序(Shell Sort)
- Shell Sort (排序详解之 希尔排序)
- 希尔排序(Shell Sort)
- 希尔排序(Shell Sort)
- 希尔排序(shell sort)
- 希尔排序(Shell Sort)
- 希尔排序(Shell Sort)
- 希尔排序(Shell Sort)
- 希尔排序(Shell Sort)
- 希尔排序(shell sort)
- 希尔排序(Shell Sort)
- 希尔排序(Shell Sort)
- 希尔排序(shell sort)
- 希尔排序(Shell Sort)
- 希尔排序(shell sort)
- 插入排序之希尔排序(Shell Sort)
- Shell Sort 希尔排序
- 希尔排序(Shell Sort)
- Hive数据倾斜总结
- 面向对象_继承、抽象类、接口
- linux下杀死进程
- 怎么查询端口被占用
- 面向对象_多态、内部类、其它
- 排序之希尔排序(Shell Sort)
- Visio2010新建E-R图
- 英语笔记:词组句子:0806
- Oracle如何新建数据库——20131208整理
- C++ 字符串与数字拼接
- 异常、包
- Java编码规范简述
- 扫描邮箱密码(当你密码忘记的时候用的上啊)
- L1、L2、正则、损失