快速排序
1.快速排序的思想
拥有更好的时间复杂度,原理:将一个数组分成两个子数组,其中一个子数组的所有元素都小于另一个子数组的元素,然后递归的将这两个子数组进行排序
void Quicksort(int a[],int l,int r){ if(l<r){ int mid=partition(a,l,r); Quicksort(a,l,mid-1); Quicksort(a,mid+1,r); } }
例题讲解
#include<bits/stdc++.h> using namespace std; const int N = 1e5 + 9; int a[N]; int partition(int a[], int l, int r) { int pivot = a[r], i = l, j = r; while(i < j){ while (i < j&&a[i] <= pivot)i++; while (i < j&&a[j] >= pivot)j--; if (i < j)swap(a[i], a[j]); else swap(a[i], a[r]); } return i; } void quicksort(int a[],int l, int r){ if (l < r){ int mid = partition(a, l, r); quicksort(a, l, mid - 1); quicksort(a, mid + 1, r); } } int main() { ios::sync_with_stdio(0), cin.tie(0), cout.tie(0); int n; cin >> n; for (int i = 1; i <= n; i++)cin >> a[i]; quicksort(a, 1, n); for (int i = 1; i <= n; i++)cout << a[i] << "\n"[i == n]; return 0; }