我遇到了一个很奇怪的问题。我在c中创建了一个quicksort程序,每当我尝试在for循环中设置i=start
时,它都没有被正确分配。亲眼看看:
#include <stdio.h>
int n=0;
void display(int *arr)
{
int i;
for(i=0;i<n;i++)
{
printf("%d ",arr[i]);
}
printf("\n");
}
void swap(int *arr,int x, int y)
{
arr[x]=arr[x]+arr[y];
arr[y]=arr[x]-arr[y];
arr[x]=arr[x]-arr[y];
}
int partition(int *arr,int start,int end)
{
int i,pindex;
pindex=start;
for(i=start;i<end;i++);
{ printf("i=%d,start=%d,end=%d;",i,start,end); |
if(arr[i]<=arr[end])
{
swap(arr,i,pindex);
display(arr);
pindex++;
}
}
swap(arr,pindex,end);
display(arr);
return pindex;
}
void quicksort(int *arr,int start,int end)
{
int pindex;
if(start<end)
{
pindex=partition(arr,start,end);
printf("---------------------\n");
quicksort(arr,start,pindex-1);
quicksort(arr,pindex+1,end);
}
}
int main(int argc, char const *argv[])
{
int arr[51];
int i;
printf("Enter number of elements: ");
scanf("%d",&n);
printf("Enter elements:\n");
for(i=0;i<n;i++)
{
scanf("%d",&arr[i]);
}
system("cls");
printf("\n Current array:\n ");
display(arr);
printf("\n Sorted array:\n ");
quicksort(arr,0,n-1);
display(arr);
return 0;
}
现在当我运行这个时,我总是被分配结束而不是开始。样本输出:
Current array:
1 7 4 2
Sorted array:
i=3,start=0,end=3;2 7 4 1
2 1 4 7
---------------------
i=3,start=2,end=3;2 1 7 4
2 1 7 0
---------------------
2 1 7 0
我很难过。请帮忙。
答案 0 :(得分:2)
在这一行:
for(i=start;i<end;i++);
最后删除分号。