C++ 希尔排序

来源:互联网 发布:派尔高网络摄像机价格 编辑:程序博客网 时间:2024/06/14 16:38

基本思想:

将整个待排序记录分割成若干个子序列,在子序列内分别进行直接插入排序,待整个序列中的记录基本有序时,对全体记录进行直接插入排序。

子序列不是被简单的“逐段分割”,而是将相距某个“增量”的记录组成一个子序列,希尔排序开始时增量较大,每个子序列中的记录个数较少,从而排序速度较快;当增量较小时,虽然每个子序列中记录个数较多,但整个序列已基本有序,排序速度也较快。

#include <iostream>using namespace std;void shellSort(int arr_int[], int n){    int j,step;    for(step = n/2; step>0; step = step/2)    {        for(int i=step+1; i<=n; i++)        {            j = i - step;            if(j>0 && arr_int[i]<arr_int[j])            {                arr_int[0] = arr_int[i];                arr_int[i] = arr_int[j];                arr_int[j] = arr_int[0];            }        }    }}int main(){    int arr_int[] = {0,6,78,20,15,3,7,69,21};    int n = sizeof(arr_int)/sizeof(arr_int[0]) - 1;    shellSort(arr_int,n);    for(int i=1; i<=n; i++)    {        cout<<arr_int[i]<<" ";    }    return 0;}