快速排序算法
来源:互联网 发布:百度网盘会员破解mac 编辑:程序博客网 时间:2024/06/01 13:35
快速排序
快速排序是一种分治法(divide-and-conquer)算法。特点概述:
- 原址排序(in place) :节省内存;
- 算法时间复杂度低 ;
- 非常实用(very practical) 。
- 快速排序
- 基本思想
- 代码实现
- 划分步骤(Partition subroutine)
- 快速排序(Quick Sort)
- 随机化快速排序(Randomized QuickSort)
基本思想
Divide:根据轴值(pivot)将数组划分为两个子数组,使得左边子数组中的所有元素值都小于等于,右边子数组的所有值大于等于。
Conquer:通过迭代实现两个子数组的排序;
Conbine:简单拼接
。
代码实现
划分步骤(Partition subroutine)
int Partiton(int Arr[], int p,int q){ int x = Arr[p]; //pivot x int i = p; int j,tmp; for(j=p+1,j<=q,j++){ if (Arr[j]<=x){ i++; tmp = Arr[j]; Arr[j] = Arr[i]; Arr[i] = tmp; } } Arr[p] = Arr[i]; Arr[i] = x; return i;}
快速排序(Quick Sort)
int QuickSort(int Arr[], int p,int q){ if(p<q){ int mid=Partition(Arr,p,q); QuickSort(Arr,p,mid-1); QuickSort(Arr,mid+1,q); }}
初始调用时,使用QuickSort(Arr,0,n-1)
即可。
随机化快速排序(Randomized QuickSort)
轴值(Pivot)取数组中的某个随机元素,即在开始排序前,将第一个元素与其他元素(其位置由产生的随机数决定)进行交换。随机化快速排序的期望时间复杂度为。
- 运行时间与输入数组不相关;
- 最差情况是由随机数产生器决定的
- 实际应用,通常比合并排序(MergeSort)快3倍以上
void Randomized_Partition(int Arr[],int p,int q){ int i=p+rand()%(q-p+1); int tmp = Arr[p]; Arr[p] = Arr[i]; Arr[i] = tmp; return Partition(Arr,p,q);}
0 0
- 排序算法--快速排序
- 排序算法--快速排序
- 排序算法---快速排序
- 排序算法-快速排序
- 排序算法------快速排序
- 排序算法---快速排序
- 排序算法-快速排序
- 排序算法---快速排序
- 排序算法--快速排序
- 排序算法--快速排序
- 排序算法--快速排序
- 排序算法:快速排序
- 排序算法 快速排序
- 排序算法--快速排序
- 排序算法--快速排序
- 【排序算法】快速排序
- 排序算法--快速排序
- 排序算法:快速排序
- mllib之梯度下降公式推导
- 九度OJ-1172-哈夫曼树
- 论述rfid与物联网关系
- C++中char类型详解
- iOS笔记1
- 快速排序算法
- 淘宝装修:1920全屏海报(源代码免费下载)
- ARM9自学笔记_汇编指令1
- Android开发之XML文件的解析的三种方法
- Java解压缩zip - 解压缩多个文件或文件夹
- 黑马程序员-JAVA学习笔记-基本数据类型及其转换
- RFID理论基础知识
- PR4E第七周作业
- linux 使用rename命令批量重命名文件