6.桶排序

 1 template<typename DataType>
 2 struct Node
 3 {
 4     DataType data;
 5     Node<DataType> *next;
 6 };
 7 const int MaxSize = 101;   //实际应该由序列中的最大值决定
 8 Node<int> *ARR[MaxSize];
 9 //使用拉链法解决散列冲突
10 void Insert(int data) {                  
11     if (ARR[data]==NULL) {
12         Node<int> * s = new Node<int>;
13         s->data = data;
14         ARR[data] = s;
15         s->next = NULL;
16     }
17     else {                            //尾插法保持队列顺序,避免了排序的不稳定性
18         Node<int> * p = ARR[data];
19         while (p->next)
20             p = p->next;
21         Node<int> * s = new Node<int>;
22         s->data = data;
23         s->next = p->next;
24         p->next = s;
25     }
26             
27 }
28 void bucketSort(int arr[], int n) {
29     for (int i = 0; i < n; i++)
30         Insert(arr[i]);
31     for (int j = 0,z=0; j < MaxSize; j++) {
32         if (ARR[j]!=NULL) {
33             Node<int> * p;
34             p = ARR[j];
35             while (p)
36             {
37                 arr[z++] = ARR[j]->data;
38                 p = p->next;
39             }
40         }
41     }
42 }
43 int main() {
44     int a[10] = { 17,8,4,5,9,3,25,4,5,10};
45     bucketSort(a, 10);
46     for (int i = 0; i < 10; i++)
47         std::cout << a[i] << " ";
48 }

 

posted @ 2019-11-12 15:21  Royzzzzz  阅读(105)  评论(0编辑  收藏  举报