您的位置:首页 > 其它

经典排序之 快速排序

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;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: