基數排序(採用鍊錶)

2021-06-26 00:59:27 字數 2534 閱讀 1759

基於兩兩比較的演算法,演算法的執行下界為ω(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

至此,排序結果完成

完整**如下:

(使用單鏈表實現的)

#includeusing namespace std;

typedef struct node

lnode;

void initiate(lnode **head)

void insert(lnode *head,int num)

q->next=p; }}

lnode * getfirstnode(lnode *head)

} 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)

}void main()

附上使用雙向鍊錶實現的**:

#include#includeusing namespace std;

int power(int a,int n) //使用遞迴,o(logn),求a的n次方

return y;

}typedef struct node

slnode;

slnode * create(int n)

head->prior=head;

head->next=head;

q=head;

for(i=0;i>p->key;

p->prior=q;

q->next=p;

q=p;

} head->prior=q;

q->next=head;

return head;

}void printsl(slnode *head)

}slnode * getfirstnode(slnode *head)

else p=null;

return p;

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

void addnode(slnode *head,slnode *p)

}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++)

} 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 ...