经典排序之 快速排序
2016-03-24 20:20
381 查看
想利用这一两天复习一下几个经典的排序算法,今天先来看一下快速排序:
我们知道快速排序的思想是:先找到一个枢轴,然后进行分块,将其中元素比枢轴小的元素放到枢轴左边,将比他大的放到他的右边,这样我们就完成了一遍基本排序。我们确定了一个数字在排好序的位置;之后利用递归再将枢轴左边的数据分块,将右边的数据分块即可;
算法实现:
我们知道快速排序的思想是:先找到一个枢轴,然后进行分块,将其中元素比枢轴小的元素放到枢轴左边,将比他大的放到他的右边,这样我们就完成了一遍基本排序。我们确定了一个数字在排好序的位置;之后利用递归再将枢轴左边的数据分块,将右边的数据分块即可;
算法实现:
#include<iostream> using namespace std; void swap( int &m, int &n){ int temp = m; m = n; n = temp; } int Partition(int *data, int begin, int end){ //找到枢轴,然后将左右的数据分开 if(data == NULL || begin < 0 || end < 0){ cout<<"the invalid array"<<endl; } int key = data[begin]; int pos = begin; for(int index = begin + 1; index < end; index++){ if(data[index] <= key){ ++pos; swap(data[pos], data[index]); } } swap(data[begin], data[pos]); return pos; } void QuickSort(int *data, int begin, int end){ //递归实现 if(begin == end){ return; } int index = Partition(data, begin, end); if(index > begin){ QuickSort(data, begin, index - 1); } if(end > index){ QuickSort(data, index + 1, end); } } int main(){ int num[] = {12, 3, 5, 9, 13, 0, 78, 11, 99, 23, 34, 8}; //测试程序可行性 int len = sizeof(num) / sizeof(int); QuickSort(num, 0, len); for(int i = 0; i < len; i++){ cout<<num[i]<<' '; } return 0; }
相关文章推荐
- 详解C#中的反射
- form_for的关系
- 【HPU】[1737]老王特警队
- MY GOAL
- 单片机设计经验设计技巧集锦
- java.堆栈浅层小知识
- POJ 1611 (并查集,按秩合并)
- Intellj IDEA 启动参数调优
- linux下测试磁盘的读写IO速度
- ffmpeg /x264视频流编解码末尾丢帧问题分析和解决
- grep用法
- poj 2506 Tiling 《大数加法+递推》
- IndiaHacks 2016 - Online Edition (Div. 1 + Div. 2) B. Bear and Compressing
- 最大公约数
- artDialog记录
- shell中的字符串操作和数学运算
- 二维有序矩阵的查找
- matlab 曲线拟合
- matlab 曲线拟合
- bzoj 3065: 带插入区间K小值 替罪羊树套主席树