24h購物| | PChome| 登入
2011-08-02 12:24:34| 人氣1,753| 回應0 | 上一篇 | 下一篇

QuickSort (快速排序, 隨機化版本)

推薦 0 收藏 0 轉貼0 訂閱站台

退化的機率已經下降很多了
/**********************************************************************************/

/*  Problem: a153 "快速排序(二)!!!!" from GrD                                */
/*  Language: C                                                                   */
/*  Result: AC (80ms, 936KB) on ZeroJudge                                         */
/*  Author: morris1028 at 2011-08-02 11:38:41                                     */
/**********************************************************************************/


#include<stdio.h>
#include<stdlib.h>
int Data[500001];
void Swap(int x, int y) {
    int t;
    t = Data[x], Data[x] = Data[y], Data[y] = t;
}
int split(int l, int r) {
    int a = l, b, t = Data[l];
    for(b = l+1; b <= r; b++) {
        if(Data[b] <= t)
            a++, Swap(a, b);
    }
    Swap(l, a);
    return a;
}
void QuickSort(int l, int r) {
    if(l < r) {
        int v = l + rand()%(r-l);
        Swap(l, v);
        int m = split(l, r);
        QuickSort(l, m-1);
        QuickSort(m+1, r);
    }
}
main() {
    int n = 0, a;
    while(scanf("%d", &Data[n]) == 1)
        n++;
    QuickSort(0, n-1);
    for(a = 0; a < n; a++)
        printf("%d ", Data[a]);
    return 0;
}

台長: Morris
人氣(1,753) | 回應(0)| 推薦 (0)| 收藏 (0)| 轉寄
全站分類: 不分類 | 個人分類: 各類演算法與示範題目 |
此分類下一篇:Dancing Links (舞鏈)
此分類上一篇:分堆插入法 (bin+insert)

是 (若未登入"個人新聞台帳號"則看不到回覆唷!)
* 請輸入識別碼:
請輸入圖片中算式的結果(可能為0) 
(有*為必填)
TOP
詳全文