码迷,mamicode.com
首页 > 编程语言 > 详细

快速排序

时间:2015-08-02 21:25:12      阅读:125      评论:0      收藏:0      [点我收藏+]

标签:

快速排序使用啦分治法的思想,首先找到一个基准数,将数字分成两部分,一部分比基准数大,一部分比基准数小,然后可以递归实现。。。

//快速排序
#include<iostream>
using namespace std;
void Sort(int *a,int left,int right);
int main(){
int n, i;
cin >> n;
int *p = new int[n];
for (i = 0; i < n; i++)
cin >> p[i];
Sort(p, 0, n - 1);
for (i = 0; i < n; i++)
cout << p[i] << " ";
cout << endl;
delete[]p;
return 0;
}
void Sort(int *a, int left, int right){
if (left >= right) //循环跳出的条件
return;
int key;
int low = left, high = right;
key = a[low]; //选取一个数作为基数
while (low < high){ //一次扫描结束的条件
while (a[high] >= key&&low < high) //从右向左扫描,直到找到比key小的数
high--;
a[low] = a[high]; //将比key小的数移到key的前面
while (a[low] <=key&&low < high) //再从左向右扫描,直到找到比key大的数
low++;
a[high] = a[low]; //将比key大的数移动到key右边
}
a[low] = key; //将key插入到中间
Sort(a, left, low - 1); //将key左边递归
Sort(a, low + 1, right); //将key右边递归
}

快速排序

标签:

原文地址:http://www.cnblogs.com/tandier/p/4696653.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!