题目2:快速排序

给定你一个长度为n的整数数列。请你使用快速排序对这个数列按照从小到大进行排序。并将排好序的数列按顺序输出。

输入格式

输入共两行,第一行包含整数n。

第二行包含n个整数,表示整个数列。

输出格式

输出共一行,包含n个整数,表示排好序的数列。

数据范围

1≤n≤100000

输入样例:

5
3 1 2 4 5

输出样例:

1 2 3 4 5

代码:

 1 #include<iostream>
 2 #include<vector>
 3 using namespace std;
 4 
 5 void func(vector<int>& vec, int start, int end)
 6 {
 7     if (start < end)
 8     {
 9         //将原问题分解为子问题A和子问题B
10         int i = start;
11         int j = end;
12         int tmp = vec[start];
13         while (i < j)
14         {
15             while (i < j && tmp < vec[j])
16             {
17                 j--;
18             }
19             if (i < j)
20             {
21                 vec[i] = vec[j];
22                 i++;
23             }
24             while (i < j && tmp >= vec[i])
25             {
26                 i++;
27             }
28             if (i < j)
29             {
30                 vec[j] = vec[i];
31                 j--;
32             }
33         }
34         vec[i] = tmp;
35         //对子问题A进行递归分解
36         func(vec, start, i - 1);
37         //对子问题B进行递归分解
38         func(vec, i + 1, end);
39     }
40 }
41 
42 int main()
43 {
44     int n;
45     cin >> n;
46     vector<int> vec;
47     for (int i = 0; i < n; i++)
48     {
49         int tmp;
50         cin >> tmp;
51         vec.push_back(tmp);
52     }
53     func(vec, 0, vec.size() - 1);
54     for (auto x : vec)
55     {
56         cout << x << " ";
57     }
58 }
posted on 2022-09-19 17:11  yc-limitless  阅读(19)  评论(0)    收藏  举报