桶排序


儲存桶排序也稱為bin 排序。它的工作原理是將元素分配到也稱為儲存桶的陣列中。 桶使用不同的排序演算法單獨排序。

桶排序的複雜性

演算法 複雜性
空間 O(1)
最壞情況 O(n^2)
最好情況 Ω(n+k)
平均情況 θ(n+k)

演算法

第1步,開始
第2步,設定一個最初為空的「桶」(`buckets`)陣列。
第3步,分散:遍歷原始陣列,將每個物件放入其儲存桶中。
第4步,對每個非空桶進行排序。
第5步,收集:按順序存取儲存桶並將所有元素放回原始陣列中。
第6步,停止

使用C語言實現桶排序演算法如下 -

#include <stdio.h>  
void Bucket_Sort(int array[], int n)  
{    
    int i, j;    
    int count[n];   
    for (i = 0; i < n; i++)  
        count[i] = 0;  

    for (i = 0; i < n; i++)  
        (count[array[i]])++;  

    for (i = 0, j = 0; i < n; i++)    
        for(; count[i] > 0; (count[i])--)  
            array[j++] = i;  
}     
/* End of Bucket_Sort() */  

/* The main() begins */  
int main()  
{  
    int array[100], i, num;   

    printf("Enter the size of array : ");     
    scanf("%d", &num);     
    printf("Enter the %d elements to be sorted:\n",num);   
    for (i = 0; i < num; i++)  
        scanf("%d", &array[i]);   
    printf("The array of elements before sorting : \n");  
    for (i = 0; i < num; i++)  
        printf("%d ", array[i]);    
    printf("The array of elements after sorting : \n");   
    Bucket_Sort(array, num);   
    for (i = 0; i < num; i++)  
        printf("%d ", array[i]);     
    printf("\n");       
    return 0;  
}