C++ 冒泡排序、选择排序时间复杂度为O(n^2),快速排序、归并排序时间复杂度为O(nlogn)
#include <any>
#include <iostream>
#include <utility>
#include <vector>
using namespace std;
void BubbleSort(vector<int> &a) {
// 冒泡排序 -- O(n^2) -- 超时
for (int i=0; i<a.size(); i++) {
for (int j=0; j<a.size()-1-i; j++) {
if (a[j] > a[j+1]) {
int t = a[j+1];
a[j+1] = a[j];
a[j] = t;
}
}
}
}
int Partition(vector<int> &a, int low, int high) {
int p=a[low];
int i=low+1, j=high;
while (true) {
while (i<=j && a[i]<=p) i++;
while (i<=j && a[j]>p) j--;
if (i>j) break;
swap(a[i], a[j]);
}
swap(a[low], a[j]);
return j;
}
void QuickSort(vector<int> &a, int low, int high) {
// 快排 -- O(nlogn)
if (low>=high) return;
int idx = Partition(a, low, high);
QuickSort(a, low, idx-1);
QuickSort(a, idx+1, high);
}
int main() {
int n;
vector<int> a;
cin >> n;
while (n--) {
int t;
cin >> t;
a.push_back(t);
}
// BubbleSort(a);
QuickSort(a, 0, a.size()-1);
for (auto i : a) {
cout << i << ' ';
}
}
// 64 位输出请用 printf("%lld")



京公网安备 11010502036488号