快排、堆排序

來源:互聯網
上載者:User
快排:

快速排序主要運用了二分的思想,每次選擇一個基準元素,比基準元素打的元素都放在基準元素前面,比基準元素小的元素都放在基準元素後面,這樣不斷遞迴細分,完成排序。 C++代碼實現:

void QuickSort(int a[], int l, int r){    int temp = a[l];    int i = l, j = r;    if(l<r){        while(i<j){            while (i<j && a[j]>= temp) {                j--;            }            if(i<j){                a[i] = a[j];                i++;            }            while(i<j && a[i] < temp){                i++;            }            if(i<j){                a[j] = a[i];                j--;            }        }        a[i] = temp;        QuickSort(a, l, i - 1);        QuickSort(a, i + 1, r);    }}
堆排序:

堆:完全二叉樹結構,以最大堆為例,所有節點的值均大於左右孩子節點的值,即a[i]>=a[i*2] && a[i]>=a[i*2+1] 。

堆排序:
1). 建立最大堆,堆頂元素為最大值。
2). 堆頂元素和最後一個元素交換,調整剩下的元素為最大堆,交換堆頂元素與最後一個元素,繼續調整…… C++代碼如下:

void MaxHeapFixDown(int a[], int i, int n){    int j = 2*i + 1;    int temp = a[i];    while(j<n){        if(j+1<n&&a[j]<a[j+1]){            j++;        }        if(temp>a[j]){            break;        }else{            a[i] = a[j];            i = j;            j = 2*i+1;        }    }    a[i] = temp;}void HeapSort(int a[], int n){    //構建最大堆    for(int i = n/2 - 1; i >= 0;--i){        MaxHeapFixDown(a, i, n);    }    //排序    for(int i = n-1;i>=1;--i){        swap(a[0], a[i]);        MaxHeapFixDown(a, 0, i);    }}

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.