選擇排序(簡(jiǎn)單選擇+堆)

基本思想:每一趟(如第i趟)在后面n-i+1(i=1,2...n-1)個(gè)待排序元素中選取關(guān)鍵字最小的元素,作為有序子序列的第i個(gè)元素,直到第n-1趟排完。


簡(jiǎn)單選擇排序

void SelectSort(ElemType A[], int n)
{
    for(i=0;i<n-1;++i){
        min=i; //記錄小最小元素的位置
        for(j=i+1;j<n;++j)
            if(A[j]<A[min])  min=j;
        if(min!=i)  swap(A[i], A[min]);
    }
}

空間效率 O(1)
時(shí)間效率 O(n^2)
不穩(wěn)定
第i個(gè)元素和當(dāng)前最小元素交換時(shí),可能會(huì)改變第i個(gè)元素與其相同關(guān)鍵字元素的相對(duì)位置(本來(lái)在前面的被換到后面去了)


堆排序

void BuildMaxHeap(ElemType A[], int len){
    for(int i=len/2;i>0;i--)
        AdjustDown(A, i, len);
}

void AdjustDown(ElemType A[], int k, int len)
{
    A[0]=A[k]; //A[0]用來(lái)暫存
    for(i=2*k;i<=len;i*=2){
        if(i<len&&A[i]<A[i+1])
            ++i;
        if(A[0]>=A[i]) break;
        else{
            A[k]=A[i];
            k=i;
        }
    }
    A[k]=A[0];
}

O(n)
基本思想:在排序過(guò)程中,將序列視為一棵完全二叉樹(shù)的順序存儲(chǔ),首先將L[1...n]個(gè)元素建成初始大頂堆,在一次輸出堆頂元素

void HeapSort(ElemType A[], int len)
{
    BuildMaxHeap(A, len);
    for(i=len;i>1;--i){
        Swap(A[i], A[1]);    //輸出堆頂元素(和堆底元素交換)
        AdjustDown(A, 1, i-1);
    }
}

空間效率O(1)
時(shí)間效率O(nlog2n)
不穩(wěn)定
進(jìn)行篩選時(shí),有可能把本來(lái)排在前面的先調(diào)到堆頂,先輸出,那就被調(diào)到后面去了。

?著作權(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)容

  • 概述 排序有內(nèi)部排序和外部排序,內(nèi)部排序是數(shù)據(jù)記錄在內(nèi)存中進(jìn)行排序,而外部排序是因排序的數(shù)據(jù)很大,一次不能容納全部...
    蟻前閱讀 5,306評(píng)論 0 52
  • 1.插入排序—直接插入排序(Straight Insertion Sort) 基本思想: 將一個(gè)記錄插入到已排序好...
    依依玖玥閱讀 1,357評(píng)論 0 2
  • 排序的基本概念 在計(jì)算機(jī)程序開(kāi)發(fā)過(guò)程中,經(jīng)常需要一組數(shù)據(jù)元素(或記錄)按某個(gè)關(guān)鍵字進(jìn)行排序,排序完成的序列可用于快...
    Jack921閱讀 1,575評(píng)論 1 4
  • 一、 單項(xiàng)選擇題(共71題) 對(duì)n個(gè)元素的序列進(jìn)行冒泡排序時(shí),最少的比較次數(shù)是( )。A. n ...
    貝影閱讀 9,433評(píng)論 0 10
  • 概述 排序有內(nèi)部排序和外部排序,內(nèi)部排序是數(shù)據(jù)記錄在內(nèi)存中進(jìn)行排序,而外部排序是因排序的數(shù)據(jù)很大,一次不能容納全部...
    zwb_jianshu閱讀 1,435評(píng)論 0 0

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