快速排序2(复习)
2018-03-24 09:16
330 查看
1)快速排序主要有四个部分:如何确定轴值pivot ;如何进行一次;如何处理划分得到的待排子序列; 如何判断排序的结束
..
![](https://img-blog.csdn.net/20180324092006636)
具体代码: 一次划分代码:
..快速排序代码:
..
2)快速排序pivot初始时为1。
..1:对一次划分函数 partition () 设定3个形参(数组r【】,待排序序列的起始位置first,待排序序列的终止位置end.(int i=first,int j=end); | |
一次划分的四大步骤: | 2:(一般)先进行右扫描(就是从待排序序列的最右边往左扫描),当对应的 r[i] r[j]不满足 r[i]<=r[j] 的时候 交换位置。同时i++,准备进行左扫描; |
3:(进行左扫描)当对应的 r[i] r[j]不满足 r[i]<=r[j] 的时候 交换位置。同时 j - - ,准备进行右扫描; | |
4:不断重复步骤2,3直到 i ==j (也就是条件不满足 i<j 时) |
具体代码: 一次划分代码:
// int Partition(int r[],int first,int end) { int i = first; int j = end; while (i<j) {//最基本的条件 while (i<j && r[i]<=r[j]) {//这里i<j的条件不能丢!!循环不断继续,可能在这个循环里面 i就有可能大于等于j j--;//(一般)一开始进行右扫描 } if (i<j) {//当上面的条件不满足的时候(可能是 i==j,也可能是r[i]>r[j]了) r[i] <-->r[j];//r[i]和r[j]交换位置 i++;//准备进行左扫描 } while (i<j && r[i]<=r[j]) {//类似于上面的 i++; } if (i<j) { r[i] <-->r[j];//r[i]和r[j]交换位置 j--; } } return i;//这里返回的是i,返回j应该也是一样的(条件不满足的时候i是等于j的) }
..快速排序代码:
void Quicksort(int r[],int first,int end) { if (first<end) {//当 first小于end的时候执行 int pivot = Partition(r,first,end); Quicksort(r,first,pivot-1); Quicksort(r,pivot+1,end); } }
..
相关文章推荐
- 快速排序复习
- 复习 冒泡,快速 排序
- 快速排序--个人思路与书本思路 (复习排序算法)
- 复习一下简单的排序算法之 快速排序
- 排序算法复习(Java实现)(一): 插入,冒泡,选择,Shell,快速排序
- 快速排序——复习
- 排序算法复习(Java实现)(一): 插入,冒泡,选择,Shell,快速排序
- 1063 sicily (木有准确理解题意,一直wrong error)——不过这事快速排序的一次复习,还是记录一下
- C++复习之堆排序&快速排序
- 《数据结构与算法分析:C语言描述》复习——第六章“排序”——快速排序
- 数据结构--查找&&排序(快速复习)
- 算法复习:快速排序
- 排序算法复习(Java实现)(一): 插入,冒泡,选择,Shell,快速排序
- 算法复习--快速排序
- 排序算法复习(Java实现)(二): 插入,冒泡,选择,Shell,快速排序
- 快速排序复习
- 排序算法复习(Java实现): 插入,冒泡,选择,Shell,快速排序
- 【转】排序算法复习(Java实现)(一): 插入,冒泡,选择,Shell,快速排序
- 排序算法复习(1)-- 快速排序
- 排序算法复习(Java实现)(一): 插入,冒泡,选择,快速排序