快速排序C++
2016-03-21 12:21
253 查看
/* * quick_sort.cpp * * Created on: 2016-3-21 * Author: Lv_Lang */ //快速排序 #include <iostream> using namespace std; int a[100];//全局定义数组,方便函数使用 void swap(int i,int j) { int temp = a[i]; a[i] = a[j]; a[j] = temp; } /*快速排序解释: 核心思想是找一个基准元素(一般选取首位元素), 然后遍历元素,比基准小的放左边,比基准大的放右边。 但其实按这个思想来写代码其实比较难写的, 所以说的更通俗一点就是:先把首位的拿出来被比较, 用一个哨兵j从数组最右边开始扫描,如果有小于基准的,先停下来; 然后哨兵i开始从数组最左边开始扫描,如果有大于基准的,也停下来; 此时左边有个比基准大的,右边有个比基准小的,交换二者就行了。 最后当两个哨兵相遇时,证明左右都扫了一遍了, 然后把他们相遇的那个点的元素跟基准元素互换位置,这就得到了一个初步排序的序列。 然后把刚才得到的序列切成两半(不含基准元素), 基准前面的元素是一半,基准后面的元素是另一半,对这两个子序列重复刚才的那个步骤。 递归一下,就能最终得到排好序的序列了。*/ void quick_sort(int left,int right) { if(left >= right)//递归临界条件 return; int i,j,temp; i = left; j = right; temp = a[left]; while(i < j) { while(a[j] >= temp && i < j) j--; while(a[i] <= temp && i < j) i++; swap(i,j); } swap(left,i); quick_sort(left,i-1); quick_sort(i+1,right); } int main() { int n; cin>>n; for(int i=0;i < n;i++) cin>>a[i]; quick_sort(0,5); for(int i=0;i<5;i++) cout<<a[i]<<" "; cout<<a[5]<<endl; return 0; }
另外,这篇博客写的挺好的,形象易懂:
坐在马桶上看算法之快速排序
相关文章推荐
- 使用C/C++写Python模块
- 基于流加密(stream cipher)下如何依靠多段密文获取特定密文的明文(c++实现)
- 设计模式--单例模式C++实现
- C++:FMC 错误
- Problem N
- 在mac console下 执行c++文件
- C++ 结构体中含有函数时sizeof结构体大小
- C++模板函数和模板类的编译与使用
- C++中利用数组对字符进行除重和排序
- Level Order Traversal 图的层序遍历 cpp
- C++中的标准IO库详解
- 2016第七届蓝桥杯 C/C++省赛第9题 交换瓶子
- C语言实现单链表
- boost类库实现普通C++类的迭代
- C++中各种类型的成员变量的初始化方法(mark-好)
- 数据类型汇总(java、php、C++)
- 【C++】定义全局常量的一个优雅的方案
- zy-c++ string 学习小结
- C++中delete和delete[]的区别
- (C++)inline关键字