快速排序

来源:互联网 发布:汉诺塔递归算法思想 编辑:程序博客网 时间:2024/04/29 13:17

一、快速排序算法的基本特性
时间复杂度:O(n*lgn)
最坏:O(n^2)
空间复杂度:O(n*lgn)
不稳定。

快速排序是一种排序算法,对包含n个数的输入数组,平均时间为O(nlgn),最坏情况是O(n^2)。
通常是用于排序的最佳选择。因为,基于比较的排序,最快也只能达到O(nlgn)

二、快速排序算法的描述
算法导论,第7章
快速排序时基于分治模式处理的,
对一个典型子数组A[p...r]排序的分治过程为三个步骤:
1.分解:
A[p..r]被划分为俩个(可能空)的子数组A[p ..q-1]和A[q+1 ..r],使得
A[p ..q-1] <= A[q] <= A[q+1 ..r]
2.解决:通过递归调用快速排序,对子数组A[p ..q-1]和A[q+1 ..r]排序。
3.合并。

三、快速排序算法

#include<iostream>#include <assert.h>using namespace std; void quicksort(int *a, int begin, int end){assert(a!=nullptr);int key = a[begin];int i = begin, j = end;if (i==j){return;}while(i<=j&&i>=0&&j>=0){while (key<=a[j]&&i<j){j--;}if (i<j){swap(a[i],a[j]);i++;}while(a[i]<=key){i++;}if (i<j){swap(a[j],a[i]);j--;}}if(j > 1)quicksort(a, begin,j-1);if(end - j > 1)quicksort(a, j+1, end); }int main(){int a[10] = {11, 25, 10, 4, 88, 2, 108, 3, 2, 21};quicksort(a, 0, 9);for(int i = 0; i < 10; i++){cout << a[i] <<endl;}return 0;}


0 0
原创粉丝点击