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 }