题目描述
给定一个数列,用快速排序算法把它排成升序。
输入
第一行是一个整数n,表示要排序的数的个数;下面一行是用空格隔开的n个整数。
输出
输出排序后的数列,每个数字占一行。
样例输入
5 3 2 1 4 5
样例输出
1 2 3 4 5
代码实现
#include <iostream>
using namespace std;
/*
* 快速排序基本思想:
* 首先,选择数组中的第一个元素为轴,然后将比它小的元素放在它的左边,比他大的元素放在右边。重复上面的步骤,知道分成一个元素。
*/
void Quick_Sort(int arr[], int left,int right) {
if (left < right) {
int i = left;
int j = right;
int x = arr[i];
while (i < j) {
while (i < j && arr[j] > x) // 从右到左,找到一个比 x 小的元素
{
j--;
}
if (i < j) {
arr[i++] = arr[j];
}
while (i < j && arr[i] < x) // 从左到右,找到一个比 x 大的元素
{
i++;
}
if (i < j) {
arr[j--] = arr[i];
}
}
if (i == j) { // i 和 j 相同的位置就是 中间元素的位置。
arr[i] = x;
}
Quick_Sort(arr, left, i - 1);
Quick_Sort(arr, i + 1, right);
}
}
int main()
{
int n = 0;
cin >> n;
int* arr = new int[n];
for (int i = 0; i < n; i++) {
cin >> arr[i];
}
Quick_Sort(arr,0,n-1);
for (int i = 0; i < n; i++) {
cout << arr[i] << endl;
}
return 0;
}