QuickSort快排详细解释
来源:互联网 发布:淘宝可以更换手机号码 编辑:程序博客网 时间:2024/04/28 22:09
快速排序在最差排序速度,平均排序速度,上都十分优秀,经过简单大数据数组测试,快速排序至少比冒泡排序(这一类复杂度为o(n^2)的排序法)快5倍,废话少说,直接上代码上解释
以下是C++代码,大家可以直接拷贝测试一下
//每一次完成一轮遍历(即i=j时),就会产生一个位置(i或j),这个位置就是基数的正确位置,这时基数左边是比它小的数,右边是比它大的数,然后只需要对基数左边的数和右边的数分别递归调用快排就行了
void QuickSort(int*arr,int low,int high)
{
int i,j;//遍历数
int temp;//基数
i=low;//从low开始
j=high;//到high
temp=arr[low];//基数
//如果i<j说明遍历还未结束,还有位置没有遍历到,如果i=j代表只剩下一个位置,而这个位置就是基数的正确位置
while(i<j)
{ //开始排序
//从high开始找比基数小的数,替换原本基数的值,这时比基数小的数一个在i处,一个在j处
while (i<j&&arr[j]>=temp)j--;
if(i<j)
{
//如果temp(基数)>arr[j],将arr[j]这个数赋值给到基数arr[i]。
arr[i]=arr[j];
i++;
}//从i+1开始找比基数大的数,找到后(一定找得到的)放到j处,这样原来重复的数就被替代掉了,而最终重复的数将由基数替换
while(i<j&&arr[i]<temp)i++;
if(i<j)
{
arr[j]=arr[i];
j--;
}
//如果i<j说明还有没遍历到的位置,so go on
}
//此时i=j,该位置就是基数的正确存放位置
arr[i]=temp;
//开始子块排序
if(low<i-1)
//对基数之前的位置进行快速排序,相同原理
QuickSort(arr,low,i-1);//从最低值到该基数之前
if (j+1<high)
//对基数之后的位置进行快速排序,相同原理
QuickSort(arr,j+1,high);//从基数之后到最高值
}
如果有不清楚的地方,欢迎指正~
- QuickSort快排详细解释
- 快排 quicksort
- 快排算法quickSort
- 快排QuickSort
- 快排QuickSort
- lua的快排(QuickSort)
- QuickSort/快速排序/快排
- 可执行的快排 quicksort
- python 版 quicksort 快排
- QuickSort 快排算法 java
- QuickSort(经典快排算法)
- C语言递归实现快排quicksort
- java快速排序(快排)算法Quicksort
- 把快排quicksort() 优化到 STL -> sort()
- 快排(QuickSort)的java语言的实现
- 使用Java泛型实现快速排序(快排,Quicksort)
- 快排
- 快排
- IntelliJ IDEA 14注册
- CodeForces 371C-Hamburgers(二分搜索)
- AndroidStudio无法启动手机虚拟机
- java语法小结2
- Office word图表目录多个标题之间的空行无法删除
- QuickSort快排详细解释
- HDU 2031 进制转换(模拟)
- 大型网站的HTTPS实践一:HTTPS协议和原理
- 分享一个listview嵌套listview需要重置子listview高度的调用方法
- 用程序打印万年历
- 八大排序之二分法插入排序
- 软考学习进度
- 设计模式-策略设计模式
- 小白笔记之如何用CSS进行网页布局(一) 一列布局