数据结构常用算法复习---快速排序
2013-08-09 16:59
323 查看
快速排序的时间复杂度为O(nlogn),在排序算法中效率较高,所以经常被采用。快排的思想为分治法,软件公司笔试面试中经常会考到该算法。
算法的基本思想:
1.先从数列中抽出一个数作为基准数
2.分区过程,将比这个数大的数全部放在右边,将比这个数小的全放在左边
3.对第二步分区得到的两个区在进行分区,直到每一个区中只有一个数
算法过程举例:
原始数列: 27 99 11 37 92 78 21 35 57 62
1.抽出一个数作为基数:27(low=0,high=9)
2.分区,从右往左找,找到比27小的数(62比27大,high--,57比27大,high—….)
21 99 11 37 92 78 27 35 57 62(low=0,high=6)
再从左往右找比27大的数字,21 27 11 37 92 78 99 35 57 62(low=1,high=6)
再从high=6的基础上往左找,找到11比27小 21 11 27 37 92 78 99 35 57 62(low=1,high=1)
此时low<high的条件不满足,结束分区。
3.对每一个分区重复第二步
代码:
算法的基本思想:
1.先从数列中抽出一个数作为基准数
2.分区过程,将比这个数大的数全部放在右边,将比这个数小的全放在左边
3.对第二步分区得到的两个区在进行分区,直到每一个区中只有一个数
算法过程举例:
原始数列: 27 99 11 37 92 78 21 35 57 62
1.抽出一个数作为基数:27(low=0,high=9)
2.分区,从右往左找,找到比27小的数(62比27大,high--,57比27大,high—….)
21 99 11 37 92 78 27 35 57 62(low=0,high=6)
再从左往右找比27大的数字,21 27 11 37 92 78 99 35 57 62(low=1,high=6)
再从high=6的基础上往左找,找到11比27小 21 11 27 37 92 78 99 35 57 62(low=1,high=1)
此时low<high的条件不满足,结束分区。
3.对每一个分区重复第二步
代码:
int Partion(int a[],int low,int high) { int key; key = a[low]; while(low<high){ while((low<high)&&a[high]>=key) high--; a[low]=a[high]; while((low<high)&&a[low]<=key) low++; a[high]=a[low]; } a[low] = key; return low; } void qsort(int a[],int low,int high){ int loc=0; if(low<high){ loc= Partion(a,low,high); qsort(a,low,loc-1); qsort(a,loc+1,high); } }
相关文章推荐
- 一步一步复习数据结构和算法基础-快速排序
- 渣渣小本求职复习之路每天一博客系列——数据结构与常用算法(1)
- 渣渣小本求职复习之路每天一博客系列——数据结构与常用算法(2)
- 渣渣小本求职复习之路每天一博客系列——数据结构与常用算法(3)
- 几种常用的数据结构算法
- iOS复习笔记13:常用数据结构之结构体
- 实际项目中常用的算法和数据结构
- 常用数据结构和算法 (算法篇)
- 【算法和数据结构】排序(四)归并排序和快速排序(C++实现)
- 算法和数据结构---排序---快速排序
- 常用算法-快速排序
- 算法设计优化中常用到的数据结构--堆栈
- 浅谈算法和数据结构: 四 快速排序
- 面试复习-------算法与数据结构------链表
- 算法与数据结构-常用排序算法总结2-计数排序
- [数据结构和算法]快速排序
- 【坐在马桶上看算法】算法3:最常用的排序——快速排序
- 面试复习重点 算法 数据结构 【山科大牛陈磊整理】
- 常用算法和数据结构的复杂度
- 常用数据结构和算法 (链表篇)