最近想把一些基本的常用算法彻底弄懂,先从快速排序开刀吧
这段代码是在http://www.cnblogs.com/morewindows/archive/2011/08/13/2137415.html基础上进行重构而成的
#include <iostream>
using namespace std;
void quick_sort(int arr[], int left, int right);
void main()
{
int aa[50] ={5,23,12,143,80,69,8,12,32,619,
15,23,312,413,30,26,8,212,72,119,
59,36,122,3,17,86,18,32,62,29,
25,29,1,243,40,6,118,52,11,19,
35,13,92,432,18,36,84,112,23,39,};
quick_sort(aa,0,49);
for(int i = 0 ; i<50; i++)
{
cout<<aa[i]<<endl;
}
while(1);
}
//快速排序
void quick_sort(int arr[], int left, int right)
{
if (left < right)
{
int le = left, ri = right, x = arr[left];
while(le < ri)
{
// 从右向左找第一个小于x的数
while(le < ri && arr[ri] >= x)
ri--;
if(le < ri)
arr[le++] = arr[ri];
// 从左向右找第一个大于等于x的数
while(le < ri && arr[le] < x)
le++;
if(le < ri)
arr[ri--] = arr[le];
}
arr[le] = x;
// 递归调用
quick_sort(arr, left, le - 1);
quick_sort(arr, le + 1, right);
}
}