C / C++算法学习笔记(1)-快速排序算法
来源:互联网 发布:myeclipse配置优化 编辑:程序博客网 时间:2024/06/08 13:23
本文原始地址:C / C++算法学习笔记(1)-快速排序算法
算法思想:
快速排序是C.R.A.Hoare于1962年提出的一种划分交换排序。
关于分治法
基本思想是:将原问题分解为若干个规模更小但结构与原问题相似的子问题。递归地解这些子问题,然后将这些子问题的解组合为原问题的解。
运用排序
1.分解
已知一个无序的数组a,以其中任意一个元素作为基准(key)(一般取两端的元素)。
第一次分解:从数组末端(索引j)开始,如果遇到比key小的元素,key和a[j]交换,j前移,再从数组前端遍历,遇到比基准大的元素(如果I<J),调换两个数的位置(key和a[i]交换),前端后移,继续下轮循环(分解)。
每一次分解后,分解所取的基准都会位于正确位置(以基准为中心,左边是小于基准的数,右边是大于基准的数-限每次分解的区域)。
2.递归求解
递归进行1所示的分解,每次分解都是在上次基准两侧进行(基准-1/基准+1),直到所有递归执行完。
3.组合
递归结束,组合完成。
算法代码
这里把第一个元素作为基准
- Void QuickSort(int *array,int left,int right)
- {
- If(left< right)//递归结束条件
- {
- Int I,j;
- Int pivot= array[i];//基准点取本次分解第一个元素
- While(i< j)
- {
- While(i<j && array[j]>= pivot) j--;
- If(i<j)
- {
- array [j]=array[i];//两个数交换
- i++;//前端索引+1
- }
- While(i<j && array[i]<= pivot) i++;
- If(i<j)
- {
- array [j]=array[i];//两个数交换
- j--;//后端索引-1
- }
- }
- Array[i] =pivot;//基准点归位
- QuickSort(int *array,left,i-1);//左右两边继续分解
- QuickSort(int *array,i+1, right);
- }
- }
算法视频:第1节:算法:快速排序
本文链接:http://student.zjzk.cn/course_ware/data_structure/web/paixu/paixu8.3.2.1.htm
- C / C++算法学习笔记(1)-快速排序算法
- Linux C学习笔记-排序算法4-快速排序
- 算法 - 快速排序(C#)
- 快速排序算法(C)
- C++快速排序算法
- 快速排序算法 C
- C快速排序算法
- C快速排序算法
- 《C算法》笔记10:快速排序
- C / C++算法学习笔记(8)-SHELL排序
- 排序算法(C实现)--------- 快速排序
- 排序算法 - 快速排序(C++)
- Linux C学习笔记-排序算法1-插入排序
- 排序算法学习笔记-C语言版本
- 排序算法(学习笔记),c语言版:
- QuickSort - 快速排序算法(C++)
- QuickSort - 快速排序算法(C++)
- 快速排序算法(C语言)
- javascript让边框在图片间跳动
- jquery mobile页面整体架构
- h标签的用法
- nginx+fpm记录php的error log
- Android的内存机制和常见泄漏情形
- C / C++算法学习笔记(1)-快速排序算法
- ListIterator &Iterator
- 备忘录模式(未完成)--- 用时再写
- 安装windows服务,报错
- Android layer-list(边框加粗效果)
- linux查看程序所依赖的共享库和程序的符号表
- Android中的那些权限
- Fedora17配置vpn连接
- http接口自动化测试框架实现