快速排序我们需要选择某一个数作为标志(一般选择第一个数),然后将数据以标志为界限划分成两块,左边的块全部小于标志,右边的块全部大于标志,接着我们采取递归的方式处理左右两块,直到划分出来的块只有一个元素时,作为递归的退出条件。
#include <iostream>
using namespace std;
void swap(int &a, int &b);
void QSort(int arr[], int low, int high);
int Partition(int arr[], int low, int high);
int main() {
int arr[] = {19, 97, 9, 17, 1, 8};
int num = 6;
QSort(arr, 0, num - 1);
for (int i = 0; i < num; ++i) {
cout << arr[i] << endl;
}
return 0;
}
void swap(int &a, int &b) {
int temp;
temp = a;
a = b;
b = temp;
}
int Partition(int arr[], int low, int high) {
//进行中心位置划分
int pivot = arr[low];
while (low < high) {
while (low < high && arr[high] >= pivot)
--high;
swap(arr[low], arr[high]);
while (low < high && arr[low] <= pivot)
++low;
swap(arr[low], arr[high]);
}
arr[low] = pivot;
return low;
}
void QSort(int arr[], int low, int high) {
if (low < high) {
int pivot_position = Partition(arr, low, high);
QSort(arr, low, pivot_position - 1);
QSort(arr, pivot_position + 1, high);
}
}