24h購物| | PChome| 登入
2011-08-01 21:40:32| 人氣850| 回應0 | 上一篇 | 下一篇

分堆插入法 (bin+insert)

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

數字範圍 0~2147483647 的整數
/**********************************************************************************/

/*  Problem: a153 "快速排序(二)!!!!" from GrD                                */
/*  Language: C                                                                   */
/*  Result: AC (174ms, 18056KB) on ZeroJudge                                      */
/*  Author: morris1028 at 2011-08-02 12:08:17                                     */
/**********************************************************************************/


#include<stdio.h>
#include<stdlib.h>
#define bin 4194304
int Mod = 2147483647/bin+1;
struct list {
    int v, next;
}X[500001];
int Bin[bin] = {}, prev, temp;
void InsBin(int n, int a) {
    int m = n/Mod;
    if(Bin[m] == 0) {
        X[a].v = n, X[a].next = 0;
        Bin[m] = a;return;
    }
    temp = Bin[m], prev = 0;
    while(X[temp].v < n) {
        prev = temp, temp = X[temp].next;
        if(temp == 0) break;
    }
    X[a].v = n, X[a].next = temp;
    if(prev != 0)    X[prev].next = a;
    else        Bin[m] = a;
    return;
}
void PrintBin() {
    int a, curr;
    for(a = 0; a < bin; a++) {
        curr = Bin[a];
        while(curr != 0) {
            printf("%d ", X[curr].v);
            curr = X[curr].next;
        }
    }
}
main() {
    int a, n;
    a = 1;
    while(scanf("%d", &n) == 1)
        InsBin(n, a), a++;
    PrintBin();
    puts("");
    return 0;
}

台長: Morris
人氣(850) | 回應(0)| 推薦 (0)| 收藏 (0)| 轉寄
全站分類: 不分類 | 個人分類: 各類演算法與示範題目 |
此分類下一篇:QuickSort (快速排序, 隨機化版本)
此分類上一篇:RadixSort (基數排序)

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