排序算法(二):插入排序和希爾排序

1.插入排序

待排序數(shù)組從arr[1]向后遍歷,“插入”是指將待排序元素插在已排序元素中某個(gè)合適的位置,其中arr[0]視作已排序元素。插入排序與打撲克牌時(shí)的理牌比較相似,但不同的是,人能一眼看出待排序的那張牌需要插入的位置,而機(jī)器需要通過(guò)不斷比較大小和移動(dòng)元素來(lái)達(dá)到插入的目的。順序排序下,如果待排序元素小于前一個(gè)元素,則將前一個(gè)元素向后移動(dòng)一位,否則進(jìn)入到下一個(gè)待排序元素的操作中直至排序完成。

插入排序.gif

python實(shí)現(xiàn):

def insert_sort(arr):
    for i in range(1, len(arr)):
        key = arr[i]
        j = i - 1
        while j >=0 and key < arr[j] : 
            arr[j + 1] = arr[j]  # 等同于將arr[j]向后移一位
            j -= 1
        arr[j+1] = key

c++實(shí)現(xiàn):

void insert_sort2(int arr[], int len){
    clock_t time_start=clock();
    for(int i=1;i<len;i++){
        int key = arr[i];
        int j = i-1;  
        while(j>=0 && (key < arr[j])){
            arr[j+1] = arr[j]; // 等同于將arr[j]向后移一位
            j--;
        }
        arr[j+1]=key; 
    }
}

2.希爾排序

希爾排序,也稱遞減增量排序算法,是插入排序的一種更高效的改進(jìn)版本。希爾排序的基本思想是:先將整個(gè)數(shù)組按照間隔 gap 分成若干子序列分別進(jìn)行插入排序,待整個(gè)數(shù)組"基本有序"時(shí),再對(duì)該數(shù)組進(jìn)行插入排序。

希爾排序.png

python實(shí)現(xiàn):

def shell_sort(arr): 
    n = len(arr)
    gap = int(n/2) # 先將間隔gap定位數(shù)組長(zhǎng)度的一半
    while gap > 0: 
        for i in range(gap, n): 
            key = arr[i]
            j = i - gap
            while  j >= 0 and key < arr[j]: 
                arr[j+gap] = arr[j]
                j -= gap
            arr[j+gap] = key
        gap = int(gap/2)

c++實(shí)現(xiàn):

void shell_sort(int arr[], int len){
    int gap = int(len/2); // 先將間隔gap定位數(shù)組長(zhǎng)度的一半
    while(gap > 0){
        for(int i=gap;i<len;i++){
            int key = arr[i];
            int j = i - gap;
            while(j>=0 && key<arr[j]){
                arr[j+gap] = arr[j];
                j -= gap;
            }
            arr[j+gap] = key;
        }
        gap = int(gap/2);
    }
}
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 1、直接插入排序 算法思想若下個(gè)升序排序,將數(shù)組中的元素依次與前面的元素(前面的元素已是排序好的狀態(tài))進(jìn)行比較,找...
    資深養(yǎng)豬大戶閱讀 293評(píng)論 0 0
  • 排序算法說(shuō)明 (1)排序的定義:對(duì)一序列對(duì)象根據(jù)某個(gè)關(guān)鍵字進(jìn)行排序; 輸入:n個(gè)數(shù):a1,a2,a3,…,an 輸...
    code武閱讀 750評(píng)論 0 0
  • Ba la la la ~ 讀者朋友們,你們好啊,又到了冷鋒時(shí)間,話不多說(shuō),發(fā)車! 1.冒泡排序(Bub...
    王飽飽閱讀 1,897評(píng)論 0 7
  • 十大經(jīng)典排序算法 來(lái)源:https://github.com/wangguanfu/-Sorting-algori...
    星丶雲(yún)閱讀 829評(píng)論 0 7
  • 某年月日,北溪先生現(xiàn)代詩(shī)一首《懷念像一口古井》示我,其情切,其意深,某不勝慨然,曰“ 深深井,重重憶,幾回魂夢(mèng)驚漣...
    江南茶客閱讀 361評(píng)論 0 1

友情鏈接更多精彩內(nèi)容