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