快速排序
来源:互联网 发布:汉诺塔递归算法思想 编辑:程序博客网 时间: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
- 快速排序
- 快速排序
- 快速排序
- 快速排序!
- 快速排序
- 快速排序
- 快速排序
- 快速排序
- 快速排序
- 快速排序
- 快速排序
- 快速排序
- 快速排序
- 快速排序
- 快速排序
- 快速排序
- 快速排序
- 快速排序
- 部署Java Web项目报错(一)
- centos 安装ia32-libs
- 数据结构(C)---二分法随记
- 因子和阶乘
- ps画高光技巧
- 快速排序
- Hibernate学习笔记
- Linux下配置QT for Android 环境
- The type javax.servlet.http.HttpServletRequest cannot be resolved.
- Android与linux的区别与联系
- C++引用&和指针在作为形参时的区别
- 嵌入式面试试题_1
- 计算机投稿
- 常用Linux指令: SED