最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

C++實現(xiàn)希爾排序算法實例

 更新時間:2022年01月07日 17:29:28   作者:恒天1020  
大家好,本篇文章主要講的是C++實現(xiàn)希爾排序算法實例,感興趣的同學(xué)趕快來看一看吧,對你有幫助的話記得收藏一下,方便下次瀏覽

1.代碼模板

// 希爾排序(Shell Sort)
void ShellSort(SqList *L)
{
    int i, j;
    int increment = L->length;  // 先讓增量初始化為序列的長度
    do {
        increment = increment / 3 + 1;   // 計算增量的值
        for (i = increment + 1; i <= L->length; i ++ ) { 
            if (L->arr[i] < L->arr[i - increment]) {   // 如果L->[i]需要插入有序增量子表
                L->arr[0] = L->arr[i];   // 暫存在哨兵位
                for (j = i - increment; j > 0 && L->arr[0] < L->arr[j]; j -= increment) {  // 遍歷增量子表,尋找插入位置
                    L->arr[j + increment] = L->arr[j];
                }
                L->arr[j+increment] = L->arr[0];  // 插入
            }
        }
    } while (increment > 1);
}

2.算法介紹

希爾排序,又叫縮小增量排序,算法屬于插入類排序的進階算法,采取跳躍分割的策略,將關(guān)鍵字較小的元素跳躍式的往前挪,大大減小了交換比較的次數(shù)。使得序列整體基本有序 ,即大的元素基本在后面,小的元素基本在前面,不大不小的元素基本在中間。

希爾排序的關(guān)鍵在于將序列中相隔某個“增量”的元素組成一個子序列,且序列的最后一個增量必須為1,這樣才能保證最后的結(jié)果是有序且正確的。但增量如何選擇為最佳,至今仍無定論。且由于元素是跳躍式移動的,所有希爾排序是一個不穩(wěn)定的排序算法,其時間復(fù)雜度受到增量選擇的影響,最好為O(n^1.3) , 最壞為O(n*n)。

3.實例

#include <iostream>
using namespace std;

const int N = 100;

typedef struct
{
    int arr[N];    // 存儲待排序的序列
    int length;    // 存儲序列的長度
} SqList;

void ShellSort(SqList *L)
{
    int i, j;
    int increment = L->length;
    do {
        increment = increment / 3 + 1;
        for (i = increment + 1; i <= L->length; i ++ ) {
            if (L->arr[i] < L->arr[i - increment]) {
                L->arr[0] = L->arr[i];
                for (j = i - increment; j > 0 && L->arr[0] < L->arr[j]; j -= increment)
                    L->arr[j + increment] = L->arr[j];
                L->arr[j + increment] = L->arr[0];
            }
        }
    } while (increment > 1);
}

int main()
{
    SqList L;
    L.arr[1] = 50;
    L.arr[2] = 10;
    L.arr[3] = 90;
    L.arr[4] = 30;
    L.arr[5] = 70;
    L.arr[6] = 40;
    L.arr[7] = 80;
    L.arr[8] = 60;
    L.arr[9] = 20;
    L.length = 9;

    ShellSort(&L);
    for (int i = 1; i <= L.length; i ++ )
        cout << L.arr[i] << " ";

}

到此這篇關(guān)于C++實現(xiàn)希爾排序算法實例的文章就介紹到這了,更多相關(guān)C++希爾排序算法內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • c++雙向鏈表操作示例(創(chuàng)建雙向鏈、雙向鏈表中查找數(shù)據(jù)、插入數(shù)據(jù)等)

    c++雙向鏈表操作示例(創(chuàng)建雙向鏈、雙向鏈表中查找數(shù)據(jù)、插入數(shù)據(jù)等)

    這篇文章主要介紹了c++雙向鏈表操作示例,包括創(chuàng)建雙向鏈、刪除雙向鏈表、雙向鏈表中查找數(shù)據(jù)、插入數(shù)據(jù)等,需要的朋友可以參考下
    2014-05-05
  • C++ 操作系統(tǒng)內(nèi)存分配算法的實現(xiàn)詳解

    C++ 操作系統(tǒng)內(nèi)存分配算法的實現(xiàn)詳解

    本文主要介紹了在動態(tài)分區(qū)管理方式下采用不同的分配算法實現(xiàn)主存分配和實現(xiàn)主存回收,旨在幫助學(xué)生理解在動態(tài)分區(qū)管理方式下應(yīng)怎樣實現(xiàn)主存空間的分配和回收。感興趣的可以了解一下
    2021-11-11
  • C++實現(xiàn)雙向鏈表

    C++實現(xiàn)雙向鏈表

    這篇文章主要為大家詳細介紹了C++實現(xiàn)雙向鏈表,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2020-05-05
  • 淺談C語言結(jié)構(gòu)體

    淺談C語言結(jié)構(gòu)體

    本文主要介紹C語言 結(jié)構(gòu)體的知識,學(xué)習(xí)C語言肯定需要學(xué)習(xí)結(jié)構(gòu)體,這里詳細說明了結(jié)構(gòu)體并附示例代碼,供大家參考學(xué)習(xí),有需要的小伙伴可以參考下
    2021-10-10
  • Qt自定義Widget實現(xiàn)互斥效果詳解

    Qt自定義Widget實現(xiàn)互斥效果詳解

    在使用Qt時,可能會遇到這種問題:多個控件互斥,類似于QRadiButton控件,但又不是單純的QRadioButton控件,互斥的可能是一個窗口,也可能是幾個按鈕,等等多種情況。本文將介紹利用Qt自定義Widget實現(xiàn)的互斥效果,需要的可以參考一下
    2022-01-01
  • C/C++?Qt數(shù)據(jù)庫SqlRelationalTable關(guān)聯(lián)表詳解

    C/C++?Qt數(shù)據(jù)庫SqlRelationalTable關(guān)聯(lián)表詳解

    這篇文章主要介紹了QT中SqlRelationalTable關(guān)聯(lián)表組件的使用,文中代碼對我們的學(xué)習(xí)和工作具有一定價值,感興趣的朋友可以了解一下
    2021-12-12
  • C++中volatile關(guān)鍵字的使用詳解以及常見的誤解

    C++中volatile關(guān)鍵字的使用詳解以及常見的誤解

    volatile 關(guān)鍵字是一種類型修飾符,用它聲明的類型變量表示可以被某些編譯器未知的因素更改,比如:操作系統(tǒng),硬件或者其他線程等
    2020-01-01
  • 基于Qt編寫超精美自定義控件的示例代碼

    基于Qt編寫超精美自定義控件的示例代碼

    無論是哪一門開發(fā)框架,如果涉及到UI這塊,肯定需要用到自定義控件,本文為大家準(zhǔn)備了一些基于QT編寫的超精美自定義控件,需要的可以參考一下
    2023-07-07
  • C語言用棧和隊列實現(xiàn)的回文檢測功能示例

    C語言用棧和隊列實現(xiàn)的回文檢測功能示例

    這篇文章主要介紹了C語言用棧和隊列實現(xiàn)的回文檢測功能,結(jié)合具體實例形式分析了C語言棧和隊列的定義及使用棧和隊列進行回文檢測的操作技巧,需要的朋友可以參考下
    2017-06-06
  • C語言實現(xiàn)航班訂票系統(tǒng)

    C語言實現(xiàn)航班訂票系統(tǒng)

    這篇文章主要為大家詳細介紹了C語言實現(xiàn)航班訂票系統(tǒng),文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-12-12

最新評論

子洲县| 团风县| 高淳县| 西充县| 湟中县| 且末县| 确山县| 怀来县| 隆子县| 吉首市| 武安市| 临江市| 贵定县| 前郭尔| 灵川县| 白朗县| 翼城县| 余干县| 江川县| 无锡市| 丰县| 绩溪县| 常德市| 万盛区| 黑水县| 长葛市| 望谟县| 正宁县| 麟游县| 休宁县| 乌恰县| 东阿县| 贵溪市| 咸丰县| 芷江| 天全县| 昌图县| 岚皋县| 青冈县| 资兴市| 澄江县|