排序之希尔排序(Shell Sort)
2013-12-08 15:32
489 查看
希尔排序(Shell Sort):又叫缩小增量排序,该方法是直接插入排序的改进,其实质就是分组直接插入排序;
我们还记得直接插入排序对基本有序的序列排序时,效率很高;由此思想得出希尔排序;
基本思想:
先将待排序序列分成若干个子序列(由相距同等增量的元素组成),然后分别对分组序列进行直接插入排序;
缩小增量,依据增量再次分组排序。待到整个序列基本有序时,整体进行直接插入排序;
算法操作步骤:
1)选择某一增量序列:gap1 , gap2......gapk,其中gapi > gapj,gapk = 1;
2)按照给定增量序列个数K,需要进行K趟排序;
3)每趟排序中,根据给定增量gapi,将序列分成程度为m的不同子序列,对子序列进行直接插入排序;
算法实现:
我们还记得直接插入排序对基本有序的序列排序时,效率很高;由此思想得出希尔排序;
基本思想:
先将待排序序列分成若干个子序列(由相距同等增量的元素组成),然后分别对分组序列进行直接插入排序;
缩小增量,依据增量再次分组排序。待到整个序列基本有序时,整体进行直接插入排序;
算法操作步骤:
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]); }
相关文章推荐
- 排序--希尔排序的实现(shellsort)
- 排序1+3:基数排序(RadixSort),希尔排序(ShellSort)和快速排序(QuickSort)
- 【排序算法 】希尔排序 shell sort(插入类排序)
- uva 10152 ShellSort 龟壳排序(希尔排序?)
- 排序——希尔排序(Shell Sort)
- uva 10152 ShellSort 龟壳排序(希尔排序?)
- C++实现谢尔排序(希尔排序)(shell sort)
- Java基础知识强化57:经典排序之希尔排序(ShellSort)
- 排序1+3:基数排序(RadixSort),希尔排序(ShellSort)和快速排序(QuickSort)
- 希尔排序(shellsort)又叫增量递减排序(diminishing increment)
- 排序_Shell_Sort(希尔排序)
- PHP Array -- PHP 排序 -- 希尔排序(Shell Sort)
- 【DS】排序算法之希尔排序(Shell Sort)
- 排序 —— 希尔排序(Shell sort)
- 插入排序之希尔排序(Shell Sort)
- 排序_Shell_Sort(希尔排序)更正版
- 无聊写排序之 ---- 希尔排序(ShellSort)
- [排序] 希尔排序(Shell Sort)
- 希尔排序(Shellsort)
- C语言-数据结构-希尔排序(shell sort)-源代码