快速排序是C.A.R.Hoare 于1962年发明的。对于一个给定的数组,从中选择一个元素,以该元素为界将其余元素划分为两个子集,一个子集中的所有元素都小于该元素,另一个子集中的所有元素都大于或等于该元素。对这两个子集递归执行这一过程,当某个子集中元素数小于2时,这个子集就不需要再次排序,终止递归。
代码如下:
#include <cstdlib>
#include <iostream>
using namespace std;
int v[100],n;
void swap(int v[],int a,int b)
{
int tmp;
tmp=v[a];
v[a]=v[b];
v[b]=tmp;
}
void qsort(int v[],int left,int right)
{
int i,last;
if(left>=right)
{
return;
}
swap(v,left,(right+left)/2);
last=left;
for(i=left+1;i<=right;i++)
if(v[i]<v[left])
swap(v,++last,i);
swap(v,left,last);
qsort(v,left,last-1);
qsort(v,last+1,right);
}
int main(int argc, char *argv[])
{
int i;
scanf("%d",&n);
for(i=0;i<n;i++)
{
scanf("%d",&v[i]);
}
qsort(v,0,n-1);
for(i=0;i<n;i++)
printf("%d ",v[i]);
system("PAUSE");
return EXIT_SUCCESS;
}
我不知道为什么swap()函数写成这样不可以
void swap(int a,int b)
{
int tmp;
tmp=a;
a = b;
b = tmp;
}
哪位大神可以帮忙解答一下呢?