快速排序代码如下:
![ContractedBlock.gif](https://i-blog.csdnimg.cn/blog_migrate/8f900a89c6347c561fdf2122f13be562.gif)
![ExpandedBlockStart.gif](https://i-blog.csdnimg.cn/blog_migrate/961ddebeb323a10fe0623af514929fc1.gif)
1
#include
<
iostream
>
2 using namespace std;
3 int a[ 10001 ];
4 void qs( int s, int e) // s=star ; e = end
5 {
6 int x = a[s],l = s,r = e; // 以第一个数为参照做比较
7 if (l >= r) return ; // 只剩下一个元素,不满足递归基线条件
8 while (l < r){ // 从高位开始比较
9 while (l < r && a[r] >= x) r -- ; // 不用交换元素的话,不断从高位往低位减少
10 a[l] = a[r]; // 不满足 a【r】 》= x ,则交换元素
11 while (l < r && a[l] <= x) l ++ ; // 不用交换元素的话,不断从低位往高位增加
12 a[r] = a[l]; // 不满足a【l】 《=x,则交换元素
13 }
14 a[r] = x; // 把枢轴元素放到a【r】中 。
15 qs(s,r - 1 ); // 已经确定好位置的元素不用再传去递归了,故r-1
16 qs(r + 1 ,e); // 递归
17 }
18 int main() {
19 int i,n;
20 cin >> n;
21 for (i = 0 ;i < n;i ++ )
22 cin >> a[i];
23 qs( 0 ,n - 1 );
24 for (i = 0 ;i < n;i ++ )
25 cout << a[i] << " " ;
26 system( " pause " );
27 }
2 using namespace std;
3 int a[ 10001 ];
4 void qs( int s, int e) // s=star ; e = end
5 {
6 int x = a[s],l = s,r = e; // 以第一个数为参照做比较
7 if (l >= r) return ; // 只剩下一个元素,不满足递归基线条件
8 while (l < r){ // 从高位开始比较
9 while (l < r && a[r] >= x) r -- ; // 不用交换元素的话,不断从高位往低位减少
10 a[l] = a[r]; // 不满足 a【r】 》= x ,则交换元素
11 while (l < r && a[l] <= x) l ++ ; // 不用交换元素的话,不断从低位往高位增加
12 a[r] = a[l]; // 不满足a【l】 《=x,则交换元素
13 }
14 a[r] = x; // 把枢轴元素放到a【r】中 。
15 qs(s,r - 1 ); // 已经确定好位置的元素不用再传去递归了,故r-1
16 qs(r + 1 ,e); // 递归
17 }
18 int main() {
19 int i,n;
20 cin >> n;
21 for (i = 0 ;i < n;i ++ )
22 cin >> a[i];
23 qs( 0 ,n - 1 );
24 for (i = 0 ;i < n;i ++ )
25 cout << a[i] << " " ;
26 system( " pause " );
27 }