小弟刚学算法,这事打手打的第一个快速排序,算法比较简陋,冗余,如果您看到有需要改进的地方,请您高台贵手,不费口舌,指点小弟一下,以便让小弟开阔视野,继续前进。
2 #include <iostream>
3 using namespace std;
4
5 //这是递归调用函数中交换函数
6 void swap(int *l, int *h)
7 {
8 int temp;
9 temp = *l;
10 *l = *h;
11 *h = temp;
12 }
13
14 //这是一次排序,完成一次排序任务,并且返回mid的值。
15 int partion(int A[], int l, int h) //A为数组,l为待排序区间的左值(low),h相同(high)
16 {
17 int* low = &A[l];
18 int* high = &A[h];
19 int* m = &A[l];
20 while(l<h)
21 {
22 while((l<h)&& *m <= *high)
23 {
24 h--;
25 high--;
26 }
27 if(l == h)
28 break;
29 swap(m, high);
30 m = high;
31 l++;
32 low++;
33 while((l<h) && *m > *low)
34 {
35 l++;
36 low++;
37 }
38 swap(m, low);
39 m = low;
40 h--;
41 high--;
42 }
43 swap(m, low);
44 int n = l;
45 return n;
46 }
47
48 //这是调用函数,可以理解为发动递归调用,而quick是被调用的排序函数
49 void quick(int A[],int l,int h)
50 {
51 if(l < h)
52 {
53 int mid = partion(A, l, h);
54 quick(A, l, mid-1);
55 quick(A, mid + 1, h);
56 }
57 }
58
59 int main()
60 {
61 int team[10];
62 for(int i=0; i < 10; i++)
63 {
64 team[i] = rand()%(10); //产生随机数
65 cout << team[i] << " ";
66 }
67 cout << endl;
68 quick(team, 0, 9);
69 for(int i = 0; i < 10; i++)
70 cout << team[i] << " ";
71 return 0;
72 }