快速排序
#include<iostream>
#include<vector>
#include<algorithm>
using namespace std;
void quicksort(vector<int> &nums, int low, int high) { //参数是引用,如何不加&的话就是平常参数,也就是传值参数
//传值参数,如果实参在函数中被修改时,外面的这个变量并不会改变
//引用参数,也就是在形参加上& ,如果实参在函数中被修改的同时外面的这个变量也会被修改
if (low < high) {
int i = low, j = high, temp = nums[low];
while (i < j) {
while (i < j && nums[j] >= temp) j--; //先从右向左找第一个小于temp的数,因为在j--的过程中会出现j<i的情况所以while语句中必须包含i<j
if (i < j) nums[i++] = nums[j];
while (i < j && nums[i] <= temp) i++; // 后从左向右找第一个大于等于temp的数
if (i < j) nums[j--] = nums[i];
}
nums[i] = temp;
quicksort(nums, low, i - 1); //递归
quicksort(nums, i + 1, high);
}
}
int main()
{
int n;
cout << "请输入数组元素个数" << endl;
while (cin >> n) {
vector<int>nums(n);
for (int i = 0; i < n; i++) {
cin >> nums[i];
}
quicksort(nums, 0, n - 1);
for (int i = 0; i < n; i++) {
cout << nums[i] << " ";
}
}
return 0;
}
快排主要运用了分治法,是nlog n的复杂度。