91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

冒泡排序和希爾排序(三十一)

發布時間:2020-08-07 04:01:06 來源:網絡 閱讀:664 作者:上帝之子521 欄目:軟件技術

        在上節博客中,我們學習了插入排序和選擇排序,那么本次我們繼續學習冒泡排序和希爾排序。什么是冒泡排序呢?它是每次從后向前進行(假設為第 i 次),j = n - 1, n - 2, ... , i, 兩兩比較 V[j-1] 和 V[j] 的關鍵字;如果發生逆序,則交換 V[j-1] 和 V[j]。下來我們看看第 i 次冒泡排序示例,如下圖所示

冒泡排序和希爾排序(三十一)

         我們來看看具體是怎么實現的,如下所示

冒泡排序和希爾排序(三十一)

冒泡排序和希爾排序(三十一)

        我們看到它是兩兩比較,小的放在前面。類似于冒水泡,輕的漂浮在上面。下來我們來看看具體源碼的實現

template < typename T >
static void Bubble(T array[], int len, bool min2max = true)
{
    bool exchange = true;

    for(int i=0; (i<len) && exchange; i++)
    {
        exchange = false;

        for(int j=len-1; j>i; j--)
        {
            if( min2max ? (array[j] < array[j-1]) : (array[j] > array[j-1]) )
            {
                Swap(array[j], array[j-1]);
                exchange = true;
            }
        }
    }
}

        測試代碼如下

#include <iostream>
#include "Sort.h"

using namespace std;
using namespace DTLib;

int main()
{
    int array[] = {3, 2, 4, 1, 5};

    Sort::Bubble(array, 5);

    for(int i=0; i<5; i++)
    {
        cout << array[i] << endl;
    }
}

        我們來看看運行結果

冒泡排序和希爾排序(三十一)

        我們來試試在 Bubble 后面加上 false 參數,看看效果

冒泡排序和希爾排序(三十一)

        下來我們來繼續看看希爾排序,那么它的基本思想是什么呢?將待排序列劃分為若干組,在每一組內進行插入排序,以使整個序列基本有序,然后再對整個序列進行插入排序。希爾排序示例如下

冒泡排序和希爾排序(三十一)

        我們來看看具體是怎么實現的,如下所示

冒泡排序和希爾排序(三十一)

冒泡排序和希爾排序(三十一)

冒泡排序和希爾排序(三十一)

        它是利用插入排序來實現的,之所以這么實現,是因為這樣的效率比之前的幾種能高點。下來我們來看看具體源碼的實現

template < typename T >
static void Shell(T array[], int len, bool min2max = true)
{
    int d = len;

    do
    {
        d = d / 3 + 1;   // 之所以這樣寫是因為經過數學推導,這樣的效率是最高的。也可以寫成 d--;

        for(int i=d; i<len; i+=d)
        {
            int k = i;
            T e = array[i];

            for(int j=i-d; (j>=0) && (min2max ? (array[j]>e) : (array[j]<e)); j-=d)
            {
                array[j+d] = array[j];
                k = j;
            }

            if( k != i )
            {
                array[k] = e;
            }
        }
    } while( d > 1 );
}

        我們先來看看不加參數 false的效果(從小到大排序)

冒泡排序和希爾排序(三十一)

        再來看看從大到小的排序

冒泡排序和希爾排序(三十一)

        我們看到已經正確實現了。通過對冒泡排序和希爾排序的學習,總結如下:1、冒泡排序每次從后向前將較小的元素交互到位;2、冒泡排序是一種穩定的排序方法,其復雜度為O(n2);3、希爾排序通過分組的方式進行多次插入排序,它是一種不穩定排序,其復雜度為O(n3/2)

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

清涧县| 丹寨县| 大城县| 惠东县| 麻江县| 张家口市| 印江| 宜良县| 东乌珠穆沁旗| 财经| 云梦县| 阿勒泰市| 揭阳市| 屏东县| 福建省| 革吉县| 根河市| 海安县| 安乡县| 海丰县| 自贡市| 华蓥市| 聂荣县| 西林县| 乐安县| 大英县| 三门县| 沈阳市| 临洮县| 榕江县| 应用必备| 乃东县| 石首市| 石河子市| 华阴市| 芜湖市| 江安县| 萨嘎县| 安达市| 张家港市| 麻栗坡县|