快速排序的递归实现
思路:将待排序的数组的最后一个当作标记数,遍历所有的数,将比它大的数放在一边,比它小的数放在另一边,最后将它插入到两断数中间,每一轮都能确定一个数的位子,只需要递归即可实现。
#include<iostream>
using namespace std;
//交换代码
int swap(int& a, int& b) {
int c;
c = a;
a = b;
b = c;
return 0;
}
//每一轮的快速排序
int quick_sort(int arr[], int low, int high) {
int x = arr[high];
int i = low - 1;
for (int j = low; j < high; j++) {
if (arr[j] <= arr[high]) {
i++;
swap(arr[i], arr[j]);
}
}
swap(arr[i+1], arr[high]);//i+1的原因是循环结束后最后一个小于x的数的位子,所以要将
//标记数插入的话,需要在i的下一个位子。
return i+1;
}
//快速排序的入口
void sort(int arr[], int low ,int high) {
if (low < high) //当剩下的数大于一个时执行
{
int partiton = quick_sort(arr, low, high);
sort(arr, low, partiton - 1);
sort(arr, partiton + 1, high);
}
}
int main() {
int a[] = { 12,89,1,6,7523,46,23,14 };
sort(a, 0, 7);
for (int i = 0; i <= 7; i++) {
cout << a[i] << " ";
}
return 0;
}