算法学习之旅,中级篇(4)-–快速排序
来源:互联网 发布:方块导航网源码 编辑:程序博客网 时间:2024/06/05 20:13
介绍
通过一趟遍历把要排序的数据分割成独立的两部分,其中一部分所有数据比另外的一部分所有数据都小。然后再按此方法对这两部分数据进行快速排序,整个排序过程可以递归进行。
分析
快速排序是找出一个元素作为基准,然后对数组进行分区操作,使基准左边元素的值都不大于基准值,基准右边的元素值都不小于基准值,如此作为基准的位置就确定了。
首先找基准元素,然后递归快排。
代码
#include<stdio.h>#include<iostream>using namespace std;void print(int a[],int n){ for(int j=0;j<n;j++) cout<<a[j]<<" "; cout<<endl; return;}void swap(int *a,int *b){ int temp=*a; *a=*b; *b=temp; return;}int partition(int a[],int low,int high){ //基准元素 int k=a[low]; //从表的两端交替地向中间扫描 int b=a[high]; int c=a[low]; while(low<high) {//从high所指位置向前搜索,至多到low+1位置,将比基准元素小的交换到低端 while(low<high&&a[high]>k) --high; while(a[low]<k) ++low; swap(&a[low],&a[high]); print(a,10); } a[low]=a[high]; a[high]=k; print(a,10); return low;}void quickSort(int a[],int low,int high){ if(low<high) {//将表一分为二 int privotLoc=partition(a,low,high); //递归对低子表递归排序 quickSort(a,low,privotLoc-1); quickSort(a,privotLoc+1,high); } return;}int main(){ int a[10]={3,1,5,7,2,4,9,6,10,8}; cout<<"初始值:"; print(a,10); quickSort(a,0,9); cout<<"结果:"; print(a,10); system("pause"); return 0;}
遇到的问题
习惯性把这个快排的比较移动操作当成插入排序来写T.T
阅读全文
0 0
- 算法学习之旅,中级篇(4)-–快速排序
- 算法学习之旅,中级篇(1)-–选择排序
- 算法学习之旅,中级篇(2)-–插入排序
- 算法学习之旅,中级篇(3)-–冒泡排序
- 算法学习之旅,中级篇(8)-–分治之二分搜索(递归)
- 算法学习之旅,中级篇(5)-–递归之杨辉三角
- 算法学习之旅,中级篇(6)-–递归之斐波拉契数列
- 算法学习之旅,中级篇(7)-–递归之汉诺塔
- 排序算法-中级篇(归并排序)
- 排序算法-中级篇
- 算法学习之快速排序(java)
- 算法学习之排序算法(五)(快速排序)
- 算法学习之排序算法:快速排序
- 算法学习之排序:快速排序算法
- 排序算法学习之快速排序算法
- 算法学习之快速排序
- 算法学习之快速排序
- 经典算法学习:排序之快速排序
- 绝对路径和相对路径
- 树莓派之蓝牙编程
- 字符设备驱动-LED驱动
- activiti全局的监听器和链接监听器
- C++项目中的extern "C" {}
- 算法学习之旅,中级篇(4)-–快速排序
- c++ primer plus 第十章答案
- Spring注解@Component、@Repository、@Service、@Controller区别
- H5基本标签及其用法
- 正则表达式匹配
- 树链剖分模板——Luogu P3384
- 线程池的原理及实现
- poj-1724-ROADS(dfs)
- 商品的CRUD(增加删除修改查找)