思路:把序列分成左右两部分,使得左边的数都比右边小;递归这个过程,直到不能再分
#include<bits/stdc++.h>
using namespace std;
int data[110];
void swap(int *a, int *b) {
int temp;
temp = *a;
*a = *b;
*b = temp;
}
int partition(int left, int right) {
int i = left;
int temp = data[right]; //将最右边的数作为基数
for (int j = left; j < right; j++) { //从左到右开始遍历
if (data[j] < temp) { //小于基数
swap(data[j], data[i]); //交换data[i]和data[j],i++
i++;
} //若大于或等于基数,j++
}
swap(data[i], data[right]);
return i; //排序后位于中间的数的位置
}
void QuickSort(int left, int right) {
if (left < right) {
int i = partition(left, right);
QuickSort(left, i - 1); //对i左边的数递归划分
QuickSort(i + 1, right); //对i右边的数递归划分
}
}
int main() {
for (int i = 0; i < 5; i++)
cin >> data[i];
QuickSort(0, 4);
for (int i = 0; i < 5; i++)
cout << data[i] << " ";
}