关于非随机快排的问题
各位大师们,求救了,SOS,为什么这样子不行呢?
#include<stdio.h>
void Swap(int &a,int &b)
{
int c;
c=a;
a=b;
b=c;
}
int partion(int a[],int left,int right)
{
int value=a[left],i,j;
i=left+1,j=right;
while(true)
{
while(a[i]<value) i++;
while(a[j]>value) j--;
if(i>=j) break;
Swap(a[i],a[j]);
}
Swap(a[i],a[left]);
return i;
}
void quicksort(int a[],int left,int right)
{
if(left<right)
{
int i;
i=partion(a,left,right);
quicksort(a,left,i-1);
quicksort(a,i+1,right);
}
}
void main()
{
int b[10]={3,2,4,-65,29,100,5,7,101,34};
quicksort(b,0,9);
for(int i=0;i<10;i++)
printf("%d ",b[i]);
}
[解决办法]
for(int i=0;i<10;i++)
[解决办法]
int partition(int a[], int left, int right){ int value = a[right]; int i, j; i = left - 1; j = left; while (j < right) { if (a[j] <= value) { i++; Swap(&a[i], &a[j]); } j++; } Swap(&a[i + 1], &a[right]); return i + 1;}
[解决办法]
void Swap(int *a,int *b){ int c; c=*a; *a=*b; *b=c;}
[解决办法]
先把swap改成那样的,再该partition
int partition(int a[],int left,int right){ int value=a[left],i,j; i=left+1; j=right; while(1) { while(a[i]<value && i <= right) i++; //不加这个条件数组可能越界 while(a[j]>value) j--; if(i>=j) break; Swap(&a[i],&a[j]); } Swap(&a[i - 1],&a[left]); return i - 1;}