有SORTING程式的C++教科書?

DATASTUCTURE的SORTING演算法怎使用?市面上有哪本書有HEAPSORT程式?演算法不會用...想看看程式啦

上一篇: 推薦三商巧福好吃低東西~
下一篇: Santa Monica college...的入學考試

訪客評論

  1. #1 金鈴 2011-09-10, 12:14 AM
    heap sort(堆積排序法):
    Heap sort 是利用二元樹的觀念,將每個節點,及其左子節點、右子節點三者最大值放至父節點的位置,將整棵二元樹以這種觀念轉換之後,可在樹根得到整棵樹的最大值,如此一來便完成一個數字的排序,將這個數字輸出,並且把在最末端的數字放到樹根,再做一次上述調整各節點值的工作,以得到整顆樹的第二大值,以此類推,最後只剩一個樹根,便是最小的元素。演算法以 C 語言撰寫如下:
    ?
    #define FALSE 0 /* 常數定義 */?
    #define TRUE 1?
    ?
    /* 副程式 Adjust 做上述調整二元樹的動作,『二元樹』?
    ?只是一個概念而已,事實上要排序的元素仍放在陣列當?
    ?中 */?
    void Adjust (int tree [], int i, int n)?
    {?
    ?int j = 2 * i, k = tree [i], done;?
    ?
    ?done = FALSE;?
    ?while ((j <= n) && ! done)?
    ?{?
    ?if ((j < n) && (tree [j] < tree [j+1]))?
    ?j++;?
    ?if (k >= tree [j])?
    ?done = TRUE;?
    ?else?
    ?{?
    ?tree [j >> 1] = tree [j];?
    ?j <<= 1; /* j = j * 2 */?
    ?}?
    ?}?
    ?tree [j >> 1] = k;?
    }?
    ?
    void HeapSort (int r [], int n)?
    {?
    ?int i, t;?
    ?
    ?for (i = (n >> 1); i >= 0; i--) /* 初始堆積 */?
    ?Adjust (r, i, n);?
    ?for (i = n - 2; i >= 0; i--) /* 每做一次調整, */
    ?{ /* 最大的元素便出 */
    ?t = r [i+1]; /* 現在 r[0] */
    ?r [i+1] = r[0];?
    ?r [0] = t;?
    ?Adjust (r, 0, i);?
    ?}?
    }?
    ?
    要排序具有 20 個元素的陣列 Array,可呼叫 HeapSort (Array, 20);。

發表評論

評論內容 (必填):

點擊獲得Trackback地址
My E-mail