基數排序(採用鍊錶)

2022-09-24 02:27:11 字數 2276 閱讀 9308

基於兩兩比較的演算法,演算法的執行下界為ω(nlogn),如果想再降低時間複雜度,只能通過其他的非基於比較的方法。基數排序就是一種方法,其時間複雜度為o(n)

基數排序的過程,假設有4個數,我們用鍊錶把他們連一起,這4個數為

321 892 538 439

第一步:我們先建立10個鍊錶,l0~l9,然後按4個數的個位的數字,依次接到相應鍊錶的後面

l0 l1 321

l2 892

l3l4

l5l6

l7l8 538

l9 439

第二步:按連線在鍊錶從l0~l9的數字,我們依照先後順序,重新生成乙個新的鍊錶

321 892 538 439

然後根據各個數的十位數,我們重新把他們連線到各個鍊錶後面

l0 l1

l2 321

l3 538 439

l4l5

l6l7

l8

l9 892

第三步:按連線在鍊錶從l0~l9的數字,我們依照先後順序,重新生成乙個新的鍊錶

321 538 439 892

然後根據各個數的百位數,我們重新把他們連線到各個鍊錶後面

l0 l1

l2

l3 321

l4 439

l5 538

l6l7

l8 892

l9

總結步:按連線在鍊錶從l0~l9的數字,我們依照先後順序,重新生成乙個新的鍊錶

321 439 538 892

至此,排序結果完成

完整**如下:

(使用單鏈表實現的)

#include

using namespace std;

typedef struct node

lnode;

void initiate(lnode **head)

void insert(lnode *head,int num)

q->next=p; }}

lnode * getfirstnode(lnode *head)

}void appendnode(lnode *head,lnode *node)

p->next=node;

node->next=null; }}

void total(lnode *l,lnode *head)

p->next=head->next;

}int power(int a,int n)

return y;

}int getnum(lnode *p,int i)

//第二個形參表示參加排序的整數最大位數一共有count位數字

void radix_sort(lnode *head,int count)

//鍊錶從頭到尾掃瞄,並將掃瞄到的節點脫離鍊錶。

while(head->next!=null)

//將10個鍊錶從0-9依次連線到head節點後面

for(i=0;i<10;i++) }

for(i=0;i<10;i++) }

void printsl(lnode *head)

return y;

}typedef struct node

slnode;

slnode * create(int n)

head->prior=q;

q->next=head;

return head;

}void printsl(slnode *head)

else p=null;

return p;

}int get_num(slnode *p,int i) //得到第i個數

void addnode(slnode *head,slnode *p)

void append(slnode *head,slnode *lhead)

}void radix_sort(slnode *head,int n) //實習基數排序

for(i=0;inext=lhead[k];

lhead[k]->prior=lhead[k];

} while(head->next!=head)

for(f=0;f<10;f++)

append(head,lhead[f]);

} for(i=0;i<10;i++)//刪除節點

delete(lhead[i]);

}void main()

基數排序(採用鍊錶)

基於兩兩比較的演算法,演算法的執行下界為 nlogn 如果想再降低時間複雜度,只能通過其他的非基於比較的方法。基數排序就是一種方法,其時間複雜度為o n 基數排序的過程,假設有4個數,我們用鍊錶把他們連一起,這4個數為 321 892 538 439 第一步 我們先建立10個鍊錶,l0 l9,然後按...

基數排序 鍊錶運用

基於兩兩比較的演算法,演算法的執行下界為 nlogn 如果想再降低時間複雜度,只能通過其他的非基於比較的方法。基數排序就是一種方法,其時間複雜度為o n 基數排序的過程,假設有4個數,我們用鍊錶把他們連一起,這4個數為 321 892 538 439 第一步 我們先建立10個鍊錶,l0 l9,然後按...

動態鍊錶實現基數排序,插入排序

includeusing namespace std struct node class listnode int node yx int i return x listnode listnode listnode listnode delete root cout n n 呼叫析構函式 void ...