您的位置:首页 > 编程语言 > C语言/C++

快速排序算法实现

2013-11-19 11:21 155 查看
#include <iostream>
#include <cstdlib>

using namespace std;

void quickSort(int *data, int length, int start, int end);

int main()
{

int test[] = {4, 3, 6, 2, 9, 0};
try
{
quickSort(test, 6, 0, 5);
}
catch(char *ch)
{
cout << ch << endl;
return 1;
}
for (int i=0; i<6; i++)
cout << test[i] << " ";
cout << endl;
return 0;
}

void swap(int* a, int* b)		//交换数据
{
int temp = *a;
*a = *b;
*b = temp;
}

int random(int start, int end)			//随机数生成器
{
return start+(end-start)*rand()/(RAND_MAX+ 1);
}

int partition(int *arr, int length, int start, int end)	//求得分界值
{
if (arr==NULL || length<=0 || start<0 || end>=length)
throw("Parameter error!");
int index = random(start, end);
if (index != end)
{
swap(&arr[index], &arr[end]);
}
int small = start-1;
for (int i=start; i<end; i++)
{
if (arr[i] < arr[end])
{
small++;
if (small != i)
{
swap(&arr[small], &arr[i]);
}
}
}
small++;
swap(&arr[small], &arr[end]);

return small;
}

void quickSort(int *data, int length, int start, int end)	//递归快速排序
{
if (start == end)
return;
int index = partition(data, length, start, end);
if (index > start)
{
quickSort(data, length, start, index-1);
}
if (index < end)
{
quickSort(data, length, index+1, end);
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  快速排序 c++ 算法