最近几天一直被poj上的一个题目困扰着,倒不是问题有多难,而是老是超时,而且超时不打紧,要命的是程序的主要耗时程序为排序部分,自己写的如下快速排序代码:
void swap(int *num1, int *num2)
{
int temp = *num1;
*num1 = *num2;
*num2 = temp;
}
int partition(int num[], int begin,int end)
{
while(begin<end)
{
while(begin<end && num[begin]<=num[end])
--end;
if(begin<end)
swap(&num[begin],&num[end]);
while(begin<end && num[begin]<=num[end])
++begin;
if(begin<end)
swap(&num[begin],&num[end]);
}
return begin;
}
void sort(int num[],int begin,int end)
{
if(begin<end)
{
int mid = partition(num,begin,end);
sort(num,begin,mid-1);
sort(num,mid+1,end);
}
}
用了上面属于教科书上的代码,提交,显示超时,只能对快排继续改进,由于在快速排序使用较多的函数是swap和pa