{r[j]=r[i]j--}}这里多了一个}符号
第二
while(ii&&r[j]>=r[0])
if(ii&&r[i]<=r[0])
这两个语句出现了ii 应该是i
其让码他的我还在帮你看
好吧,上面两个语句还有两个问题,应该把i换成j,否则一开始就判断为假
我完全看不懂你混乱的思维,直接给你贴滚闷一个快排大滑弯的代码
void quiksort(int a[],int low,int high){
int i = low
int j = high int temp = a[i] if( low <high){ while(i <j) {while((a[j] >= temp) &&(i <j)){ j--}a[i] = a[j] while((a[i] <= temp) &&(i <j)){i++} a[j]= a[i] }a[i] = temp quiksort(a,low,i-1) quiksort(a,j+1,high) }else{return }}
void main()
{
int arry[5] = {23,1,21,4,19}
quiksort(arry,0,4)
for(i=0i<5i++)
{
printf("%d ",arr[i])
}
printf("\n")
}
#include <stdio.h>int partions(int l[],int low,int high)
{
int prvotkey=l[low]
l[0]=l[low]
while (low<high)
{
while (low<high&&l[high]>=prvotkey)
--high
l[low]=l[high]
while (low<high&&l[low]<=prvotkey)
++low
l[high]=l[low]
}
l[low]=l[0]
return low
}
void qsort(int l[],int low,int high)
{
int prvotloc
if(low<high)
{
prvotloc=partions(l,low,high) //将第一次排序的结果作为氏如枢轴
qsort(l,low,prvotloc-1)//递归调用排序 由low 到prvotloc-1
qsort(l,prvotloc+1,high)//递归调用排序 由 prvotloc+1到 high
}
}
void quicksort(int l[],int n)
{
qsort(l,1,n)//第一个作为枢轴 ,从第一个排到第n个
}
void main()
{
int a[11]={0,2,32,43,23,45,36,57,14,27,39}
for (int b=1b<11b++)
printf("%3d",a[b])
printf("改核孙\n")
quicksort(a,11)
for(int c=1c<11c++)
printf("%3d"核链,a[c])
}
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)