排序算法-希爾排序

1.希爾排序

將待排序數組按照步長進行分組,然後將每組的元素利用直接插入排序的方法進行排序,每次將步長折半減小,gap=1時,利用直接插入完成排序。

1)第一層循環將gap依次折半,對序列進行分組直到gap=1;

2)第二、三層循環利用直接插入排序的兩次循環

2.圖例

 3.算法

 

//希爾排序
void shellSort(int *arr, int num)
{
    // 9,1,2,5,7,4,8,6,3,5進行排序  第一次gap = 5;
    for (int gap = num/2;gap > 0;gap /= 2)
    {
        for (int i = gap;i < num;i++)
        {
            //進行分組插入排序,gab = 5時,arr[i]和arr[gap+i]比較
            for (int j = i; j - gap >= 0 && arr[j - gap] > arr[j]; j -= gap)
            {
                //交換
                swap(arr[j - gap], arr[j]);
            }
        }
    }
}

void printArr(int *arr, int num)
{
    for (int i = 0;i < num;i++)
    {
        cout << arr[i] << " ";
    }
}

int main()
{
    int a[] = { 9,1,2,0,5,7,4,8,6,3,5 };

    cout << "排序前: " << endl;
    printArr(a, 11);
    shellSort(a, 11);
    cout << "\n";
    cout << "排序後: " << endl;
    printArr(a, 11);
    return 0;
}

4.運行截圖 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章