swift&C双语版算法之桶排序

桶排序

桶排序(Bucket Sort)的原理很简单,它是将数组分到有限数量的桶子里。假设待排序的数组a中共有N个整数,并且已知数组a中数据的范围[0, MAX)。在桶排序时,创建容量为MAX的桶数组r,并将桶数组元素都初始化为0;将容量为MAX的桶数组中的每一个单元都看作一个"桶"。在排序时,逐个遍历数组a,将数组a的值,作为"桶数组r"的下标。当a中数据被读取时,就将桶的值加1。例如,读取到数组a[3]=5,则将r[5]的值+1。

swift


func bucketSort(originArray: [Int]) -> [Int] {

let maxNum = originNum.max()
//桶的数目
var bucket:[Int] = Array.init(repeatElement(0, count: maxNum! + 1))
var newNum:[Int] = Array.init()

//给桶加标记
for index in originNum {
    let numId = index
    bucket[numId] += 1
}

for index in bucket.indices {
    
    while bucket[index] > 0 {
        newNum.append(index)
        bucket[index] -= 1
    }
}

return newNum

}

//运行结果
let originNum :[Int] = [2,3,45,7,17,99,25,25,14,75,48,14,2,3,7,17]
let newNum = bucketSort(originArray: originNum)
print(newNum)
//[2, 2, 3, 3, 7, 7, 14, 14, 17, 17, 25, 25, 45, 48, 75, 99]**

C


/**

  • 桶排序

  • @param num 待排序数组

  • @param numMax 数组的最大值

  • @param count 数组元素个数
    */
    bucket_sort(int num[],int numMax, int count)
    {
    //桶数目
    int bucketNum = numMax + 1;
    int bucket[bucketNum];
    for (int i = 0; i < bucketNum; i++) {
    bucket[i] = 0;
    }

    //给桶加标记
    for (int i = 0; i < count; i++) {
    int numId = num[i];
    bucket[numId]++;
    }

    for (int i = 0; i < numMax; i++) {
    for (int j = 1; j <= bucket[i] ; j++) {
    printf("%d \n",i);
    }
    }

}

//运行结果
int num[] = {2,3,45,7,17,99,25,25,14,75,48,14,2,3,7,17};
int count = sizeof(num) / sizeof(int);
bucket_sort(num,100,count);
//2,2,3,3,7,7,14,14,17,17,25,25,45,48,75,99,Program ended with exit code: 0

你可能感兴趣的:(swift&C双语版算法之桶排序)