堆排序

#include <iostream>
#include<algorithm>
using namespace std;
//堆排序
class HeapSort {
public:
    int* heapSort(int* A, int n) {
        int *B = new int[n];
        for (int i = n / 2 - 1; i >= 0; --i){
            HeadFixDown(A, i, n - 1);
        }
        //a[]={3,7,8,20,17,16};
        for (int i = 0; i<n; ++i){
            B[i] = A[0];
            swap(A[0], A[n - 1 - i]);
            HeadFixDown(A, 0, n - 1 - i - 1);
        }
        for (int i = 0; i<n; ++i){
            A[i] = B[i];
        }
        delete[] B;
        return A;
    }
    /*第i次循環結果
    i=0:a[]={7,16,8,20,17,3}
    i=1:a[]={8,16,17,20,7,3}
    i=2:a[]={16,20,17,8,7,3}
    i=3:a[]={17,20,16,8,7,3}
    i=4:a[]={20,17,16,8,7,3}
    i=5:a[]={20,17,16,8,7,3}
*/
    void HeadFixDown(int* A, int i, int n){
        int j, temp;
        j = i * 2 + 1;
        temp = A[i];
        while (j <= n){
            if (j + 1 <= n && A[j + 1]<A[j])
                j += 1;
            if (A[j] >= temp)
                break;
            A[i] = A[j];
            i = j;
            j = i * 2 + 1;
        }
        A[i] = temp;
    }
    void swap(int& a, int &b){
        int temp = a;
        a = b;
        b = temp;
    }
};

int main(int argc, char *argv[])
{
    int a[]={16,7,3,20,17,8};
    int size;
    HeapSort* hs = new HeapSort();
    hs->heapSort(a,5);
    int i;
        for (i = 0; i < 5; i++)
            cout << a[i] << " ";
        cout << endl;
        system("pause");
    return 0;
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章