快速排序的思想:以某一个元素key作为基准轴,将原序列划分成左右两部分,左边部分都不大于key,右边部分都不小于key,然后进行上行和下行遍历,下行遍历的时候找到比key小的,然后交换,上行遍历的时候找到比key大的然后交换,一直到上行下行遍历相遇为止,然后此时的位置就是key最终所在的位置,然后分别对左右部分的子序列进行相同的操作,递归进行,最终实现对数组的排序。
 1
 /*
 2  * QuickSort.cpp
 3  * author : freejohn
 4  * time : 2012-07-13
 5  */
 6 
 7 #include <cstdio>
 8 #include <cstring>
 9 #include <iostream>
10 #include <iterator>
11 #include <string>
12 #include <cstdlib>
13 #include <cassert>
14 using namespace std;
15 
16 template <typename T>
17 int partion(T* array, int l, int r)
18 {
19     int low, high;
20     low = l;
21     high = r;
22     T key = array[low];
23     while(high != low)
24     {
25         while(low < high && array[high] >= key) --high;
26         if(low < high)
27         {
28             array[low] = array[high];
29             ++low;
30         }
31         while(low < high && array[low] <= key) ++low;
32         if(low < high)
33         {
34             array[high] = array[low];
35             --high;
36         }
37     }
38     array[high] = key;
39     return high;
40 }
41 
42 template <typename T>
43 void QuickSort(T* array, int l, int r)
44 {
45     if(l >= r)
46         return ;
47     int index = partion(array, l, r);
48     //cout << index << endl;
49     QuickSort(array, l, index-1);
50     QuickSort(array, index+1, r);
51 }
52 
53 //test
54 int a[10005];
55 int main()
56 {
57     /*int a[10] = {3, 2, 1, 6, 5, 4, 0, 7, 9, 8};
58     QuickSort(a, 0, 9);
59     for(int i=0;i<10;++i)
60       cout << a[i] << " ";
61     cout << endl;*/
62     int n;
63     while(cin>>n)
64     {
65         for(int i=0;i<n;++i)
66             cin >> a[i];
67         QuickSort(a, 0, n-1);
68         cout << a[n/2<< endl;
69     }
70     return 0;
71 }
72