快排模板

muye 发表于 1年前 · 关联问题 【模板】快速排序

其中,left和right分别表示当前排序区间的左右端点,区间长度为1或0时停止递归。首先,选取中间端点作为基准值。然后,定义两个指针i和j分别指向左右两端,通过比较,将大于基准值的元素放到右边,小于基准值的元素放到左边,最后将基准值放到中间位置。接着,递归地对左右两个子区间进行排序,直到区间长度为1或0时停止递归。

#include <iostream> #include<cmath> using namespace std; void QuickSort(int A[], int left, int right) { if (left >= right)return; int i = left, j = right; int key = A[(left + right) / 2]; while (i<j) { while (A[j] > key) { j--; } while (A[i]<key) { i++; } if (i <= j) { swap(A[i], A[j]); i++; j--; } } QuickSort(A, left, j);//注意 QuickSort(A, i, right); } int main() { int n; cin>>n; int *A=new int[n] ; for(int i=0;i<n;i++) { cin>>A[i]; } QuickSort(A, 0, n-1); for (int i = 0; i < n; i++) { cout << A[i]<<" "; } }