c#基數(shù)排序Radix sort的實現(xiàn)方法
經(jīng)典排序算法 - 基數(shù)排序Radix sort
原理類似桶排序,這里總是需要10個桶,多次使用
首先以個位數(shù)的值進(jìn)行裝桶,即個位數(shù)為1則放入1號桶,為9則放入9號桶,暫時忽視十位數(shù)
例如
待排序數(shù)組[62,14,59,88,16]簡單點五個數(shù)字
分配10個桶,桶編號為0-9,以個位數(shù)數(shù)字為桶編號依次入桶,變成下邊這樣
| 0 | 0 | 62 | 0 | 14 | 0 | 16 | 0 | 88 | 59 |
| 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 |桶編號
將桶里的數(shù)字順序取出來,
輸出結(jié)果:[62,14,16,88,59]
再次入桶,不過這次以十位數(shù)的數(shù)字為準(zhǔn),進(jìn)入相應(yīng)的桶,變成下邊這樣:
由于前邊做了個位數(shù)的排序,所以當(dāng)十位數(shù)相等時,個位數(shù)字是由小到大的順序入桶的,就是說,入完桶還是有序
| 0 | 14,16 | 0 | 0 | 0 | 59 | 62 | 0 | 88 | 0 |
| 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 |桶編號
因為沒有大過100的數(shù)字,沒有百位數(shù),所以到這排序完畢,順序取出即可
最后輸出結(jié)果:[14,16,59,62,88]
代碼僅供參考
/// <summary>
/// 基數(shù)排序
/// 約定:待排數(shù)字中沒有0,如果某桶內(nèi)數(shù)字為0則表示該桶未被使用,輸出時跳過即可
/// </summary>
/// <param name="unsorted">待排數(shù)組</param>
/// <param name="array_x">桶數(shù)組第一維長度</param>
/// <param name="array_y">桶數(shù)組第二維長度</param>
static void radix_sort(int[] unsorted, int array_x = 10, int array_y = 100)
{
for (int i = 0; i < array_x/* 最大數(shù)字不超過999999999...(array_x個9) */; i++)
{
int[,] bucket = new int[array_x, array_y];
foreach (var item in unsorted)
{
int temp = (item / (int)Math.Pow(10, i)) % 10;
for (int l = 0; l < array_y; l++)
{
if (bucket[temp, l] == 0)
{
bucket[temp, l] = item;
break;
}
}
}
for (int o = 0, x = 0; x < array_x; x++)
{
for (int y = 0; y < array_y; y++)
{
if (bucket[x, y] == 0) continue;
unsorted[o++] = bucket[x, y];
}
}
}
}
static void Main(string[] args)
{
int[] x = { 999999999, 65, 24, 47, 13, 50, 92, 88, 66, 33, 22445, 10001, 624159, 624158, 624155501 };
radix_sort(x);
foreach (var item in x)
{
if (item > 0)
Console.WriteLine(item + ",");
}
Console.ReadLine();
}
相關(guān)文章
基于C#實現(xiàn)WinForm開發(fā)操作系統(tǒng)的文件管理系統(tǒng)代碼
基于C#的WinForm應(yīng)用程序來模擬操作系統(tǒng)文件管理系統(tǒng),可以幫助用戶在Windows環(huán)境下進(jìn)行文件的創(chuàng)建、移動、刪除與搜索等操作,這種模擬工具有助于學(xué)習(xí)文件系統(tǒng)的工作原理以及測試和開發(fā)其他軟件項目2024-12-12
c#實現(xiàn)萬年歷示例分享 萬年歷農(nóng)歷查詢
這篇文章主要介紹了c#實現(xiàn)萬年歷的方法,可以顯示農(nóng)歷、節(jié)氣、節(jié)日、星座、星宿、屬相、生肖、閏年月、時辰,大家參考使用吧2014-01-01
C#使用Selenium+PhantomJS抓取數(shù)據(jù)
本文主要介紹了C#使用Selenium+PhantomJS抓取數(shù)據(jù)的方法步驟,具有很好的參考價值,下面跟著小編一起來看下吧2017-02-02

