桶排序

前言

原理後續補全code

正文

public static double[] bucketSort(double[] array)
{
    double max = array[0];
    double min = array[0];
    for (var i = 1; i < array.Length; i++)
    {
        if (array[i] > max)
        {
            max = array[i];
        }
        if (array[i] < min)
        {
            min = array[i];
        }
    }
    var rang = max - min;
    // 桶的數量
    var bucketNum = array.Length;
    // 生成桶
    ArrayList bucketList= new ArrayList();
    for (int i = 0; i < bucketNum; i++)
    {
        bucketList.Add(new List<double>());
    }
    for (int i = 0; i < array.Length; i++)
    {
        int index=(int)((array[i] - min) / (rang / (bucketNum - 1)));
        List<double>  current= (List<double>)(bucketList[index]);
        current.Add(array[i]);
    }
    for (int i = 0; i < bucketList.Count; i++)
    {
        //對進行排序
        var current=(List<double>)(bucketList[i]);
        current.Sort();
    }
    double[] sortArray = new double[array.Length];
    var sortArrayIndex = 0;
    foreach (var list in bucketList)
    {
        foreach (var data in (List<double>)list)
        {
            sortArray[sortArrayIndex] = data;
            sortArrayIndex++;
        }
    }
    return sortArray;
}
相關文章
相關標籤/搜索