基數排序
一、基數排序是一種非比較型整數排序演算法,其原理是將整數按位數切割成不同的數字,然後按每個位數分別比較。
其實現原理:將所有待比較數值(正整數)統一為同樣的數字長度,數字較短的數前面補零。然後,從最低位開始,依次進行一次排序。這樣從最低位排序一直到最高位排序完成以後,
數列就變成乙個有序序列。
二、具體操作:此排序的真正實現是通過佇列的裝置,先進先出的原理,通過把個位,十位,百位,等其他進製也一樣,放到不同的佇列中(俗稱桶)再按照先進先出的原理得到新的序列,在通過百位將其重新入桶**等操作有獲取新的序列,按此以來得到最終的序列便是排序好的序列。
三、基數排序不同於其他排序,一般我們見到的排序都是通過比較得到的,快排,歸併都不例外,這個排序對於整數有特別好的效率而且也是一種穩定的排序。對於基數排序演算法中要m次的n個節點來存放臨時元素所以給予鏈式佇列的基數排序,其演算法複雜度為o(n)。對於順序佇列和鏈式佇列基數排序演算法的時間複雜度相同也為o(2mn)。
接下來我們以十進位制:
500,342,45,666,006,841,429,134,78,264為例:
第一次:
0500
1841
234234
134264545
6666
0067878
9429
得到:500 841 342 134 264 45 666 006 78 429
第二次:
0500
0061
2429
3134
4841
342 4556
264666778
89得到: 500 006 429 134 841 342 45 264 666 78
第三次:
0006
45 78
1134
2264
3342
4429
5500
666678
8419
得到:006 45 78 134 264 342 429 500 666 841
這就得到了排序。
排序段**:
/***基數排序的操作方法實現radix_sort()
*snode *s 用來接收tub的位址
*@param int a 表示接受要排序的陣列
*@param int length 表示該要排序的陣列的長度
*@param int d 表示進製,這裡假設是十進位制
*@param int m 表示的是要比較的數的最大的位數
*@return 無
*/void radix_sort(datatype a,int length ,int d,int m)
*q = (queue *)malloc(sizeof(queue));
*if(q !=null)
p = (snode *)malloc(sizeof(snode));
if(p !=null)
if(q->front == null)
cout<
**段**:
/***鏈式佇列中的元素的刪除
*@param queue *q 用來接收要**的元素的位址
*@param datatype *d 用來儲存儲存收回的元素
*@return int
*/ int queuedelete(queue *q,datatype *d)
if(q->front == null)
free(p);//釋放節點記憶體空間
return 1;
}全部**:
/***基數排序原理就是利用桶也就是佇列來排序的
*@author 菜鳥
*@version 2014.6.15
*/#include
#include
#include
#define maxsize 100
using namespace std;
typedef int datatype;
//定義節點用來做鏈式佇列
typedef struct nodesnode;
//定義乙個結構體將佇列的頭尾指標放在一起
typedef structqueue;
//初始化頭節點與尾節點
void queueinitiate(queue *q)
p = (snode *)malloc(sizeof(snode));
if(p !=null)
if(q->front == null)
coutdata;
p = q->front;
q->front= q->front->next;
} if(q->front == null)
free(p);//釋放節點記憶體空間
return 1;
} /**
*輸出函式
*@param int a用來接收陣列
*@param int n 表示陣列的長度
*@return 無
*/ void out_put(int a,int n){
cout<>>>>第"<**經驗證過!
線性排序之 基數排序
基數排序,radix sorting,也叫bin sort,bucker sort,基數排序法是屬於穩定性的排序,其時間複雜度為o nlog r m 其中r為所採取的基數,而m為堆數,在某些時候,基數排序法的效率高於其它的穩定性排序法。基數排序的方式可以採用lsd leastsgnificant d...
演算法 排序之基數排序
基數排序也是穩定的內排序。因為它的實現是基於內部使用了穩定的排序實現的所以基數排序整體是穩定的,而且時間複雜度為o n 舉個例子 現在我們將一些3 多 位數排序,如果你說直接判斷就好的話,那你就太天真了,因為那就又變成看o nlgn 或者o n 如何能降低時間複雜度變成o n 呢?那就要使用線性時間...
排序演算法之基數排序
首先從多排序碼排序開始介紹基數排序。以撲克牌排序為例。每張撲克牌有兩個 排序碼 花色和面值。其有序關係為 如果把所有撲克牌排成以下次序 2,a,2,a,2,a,2,a 這就是多排序碼排序。排序後形成的有序序列叫做字典有序序列。一般情況下,假定有乙個n個元素的序列 v 0,v1 vn 1 且每個元素v...