快速排序
Posted xiaoxb17
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了快速排序相关的知识,希望对你有一定的参考价值。
#include <iostream> #include <string> #include <cstdlib> #include <sstream> #include <cstring> #include <cstdio> #include <map> using namespace std; int arr[105]; void quick_sort(int i,int j){ int left = i; int right = j; int base = arr[i]; //记录基准元素 if(left>right) return; while(i!=j){ //必须先从右往左进行试探 while(arr[j]>=base&&j!=i) j--; while(arr[i]<=base&&i!=j) i++; if(i!=j){ int temp = arr[i]; arr[i] = arr[j]; arr[j] = temp; } } arr[left] = arr[i]; arr[i] = base; quick_sort(i+1,right); quick_sort(left,i-1); } int main() { int n; scanf("%d",&n); for(int i=1;i<=n;i++) scanf("%d",&arr[i]); quick_sort(1,n); for(int i=1;i<=n;i++) printf("%d ",arr[i]); return 0; }
注意:当需要排序的序列为正序或逆序的时候,每次快排只得到一个比上一次划分少一个记录的子序列
这时,快速排序的时间复杂度退化为O(n^2),快速排序的平均复杂度为O(nlogn)
快速排序是不稳定的排序,反例:对 6 2 3 3 进行排序,不能保证后面两个3的相对位置不变
以上是关于快速排序的主要内容,如果未能解决你的问题,请参考以下文章