循环初始化变量未正确分配

时间:2015-09-18 21:26:44

标签: c quicksort

我遇到了一个很奇怪的问题。我在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

我很难过。请帮忙。

1 个答案:

答案 0 :(得分:2)

在这一行:

for(i=start;i<end;i++);    

最后删除分号。