题目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 }
浙公网安备 33010602011771号