我写了一个交换swap函数,和快排quicksort函数,在快排函数中调用交换函数程序时
,程序一直会死在quicksort函数里,感觉是交换错误,求解?
PS:不是递归的问题,我把那段注释了,程序还是死了。
//交换函数
void swap(int *x,int *y)
{
int temp2;
temp2=*x;
*x=*y;
*y=temp2;
}
//快排函数
void quicksort(int *a,int left,int right)
{
int temp; //基准数
int i,j,t; //哨兵i,j,交换数t
//初始化
temp=a[left];
i=left;
j=right;
if(left>right)
return;
while(i!=j)
{
while(itemp)
j--;
while(i<j&&a[i]<temp)
i--;
swap(&a[i],&a[j]);
}
//基准数归位
swap(&temp,&a[i]);
swap(&left,&temp);
quicksort(a,left,i-1);
quicksort(a,i+1,right);
}
int Partition(int a[], int low, int high) { int x = a[high];//将输入数组的最后一个数作为主元,用它来对数组进行划分 int i = low - 1;//i是最后一个小于主元的数的下标 for (int j = low; j < high; j++)//遍历下标由low到high-1的数 { if (a[j] < x)//如果数小于主元的话就将i向前挪动一个位置,并且交换j和i所分别指向的数 { int temp; i++; temp = a[i]; a[i] = a[j]; a[j] = temp; } } //经历上面的循环之后下标为从low到i(包括i)的数就均为小于x的数了,现在将主元和i+1位置上面的数进行交换 a[high] = a[i + 1]; a[i + 1] = x; return i + 1; } void QuickSort(int a[], int low, int high) { if (low < high) { int q = Partition(a, low, high); QuickSort(a, low, q - 1); QuickSort(a, q + 1, high); } }