八大排序学习之六快速排序
来源:互联网 发布:windows键的用途 编辑:程序博客网 时间:2024/04/30 14:54
从C语言中我们了解到有个函叫做快速排序函数,我们知道之中排序方法很快,之前我们只是会用,所以今天我们一起学习快速排序的基本思想和实现。
快速的排序的平均时间复杂度为:O(nlog2n),是一种 不稳定的排序方法。
快速排序的基本思想是从数组中取一个值作为基准,把小于基准的数放在左边,大于基准的数放在右边,通过递归细分每一个区间,从而达到排序的效果。
实现的步骤:
从数组的两端开始访问,第一、从右边往左开始不遍历比基准小的数,有则,停下,没有继续往左;第二步、从左到右遍历比基准大的数,有则停下,没有则继续往右(这些都是基于两边访问还没有访问到,相同的数的前提下),直到两个都停下来,而且两个下标不一样就直接交换两个数,直到两个下标相同,则把基准作为当前的位置的值。
例如:有数组 int a[5]={2,8,7,5,6,1};
取第一个为基准,2
int i,j; 把 i从左边到右移动,把j从右到左移动
先判断j,a[j]=1小于基准,停下。
第二步,判断i,i=2,交换两值
得到1,8,7,5,6,2
继续往前
j--;a[j]=6大于基准2停下, i++,a[i]=8,也大于基准,交换两值
得1,6,7,5,8,2
继续,直到i=j=2,交换基准得a[2]=2,递归基准左边的区间和基准右边的区间
得到1,2,5,6,7,8
关键代码:
inline void adjustarr(int arr[],int left,int right){if(left>right) return;int i=left;int j=right;int x=arr[left]; while(i!=j){while(i<j&&arr[j]>=x)j--;while(i<j&&arr[i]<x)i++;//把比x小的放在i的左边,比x大的放在右边,这里用交换Myswap(arr[i],arr[j]);}Myswap(arr[i],x);//继续处理i左边和i右边的adjustarr(arr,left,i-1);adjustarr(arr,i+1,right);}对于20000个数据的执行情况如下:
0 0
- 八大排序学习之六快速排序
- 八大排序之快速排序
- 八大排序之--快速排序
- 八大排序算法(六)快速排序
- 八大排序算法(六) 快速排序
- 八大排序--交换排序 之 快速排序
- 八大排序算法之快速排序
- 八大排序算法之快速排序法
- 八大排序算法之快速排序
- 八大排序算法之快速排序
- 八大排序算法之快速排序
- 八大排序算法之快速排序
- 八大排序-快速排序
- 八大排序--快速排序
- 八大排序--快速排序
- 排序六之快速排序
- 八大排序学习之五归并排序
- 八大排序学习之七堆排序
- 影响SSE指令使用的因素-cpu特征
- iOS面试题整理带答案
- CoreImage滤镜的组合
- linux中curl命令使用小结
- 轮播图实现
- 八大排序学习之六快速排序
- 手机升级到iOS10之后,用xcode8以下的怎样解决真机调试的问题
- android起始页面与Handler(异步线程处理)
- 浅谈iOS延迟执行的几种方式以及比较
- fopen与fopen_s的区别
- 公式编辑器中有几种不同的省略号
- 《汇编语言》学习(十一)标志寄存器
- 本地 Mac 搭建 IPv6 测试环境
- PHP中fopen,file_get_contents,curl函数的区别和性能