Qsort奇怪的行为c ++

时间:2013-10-12 23:37:37

标签: c++ sorting quicksort

这是我在c ++中的qsort代码。

#include <stdio.h>

void partition(int* arr, int start, int pivot, int end){
    int i=start+1;
    for(int j=start+1; j < end; j++){
        if (arr[j]<pivot){
            int c=arr[i];
            arr[i]=arr[j];
            arr[j]=c;
            i++;
        }
    }
    int c=arr[start];
    arr[start]=arr[i-1];
    arr[i-1]=c;
}


void qsort(int *arr, int start, int end, int len){
    if (len<=1){
        // break;
    }
    else{
        int pivot=arr[start];
        partition(arr, start, pivot, end);
        qsort(arr, start, pivot-1, len-1);
        qsort(arr, pivot+1, end, len-1);

    }
}



int main(){
    int len;
    printf("Vvedite kolvo elementov");
    scanf("%d", &len);
    int *arr=new int[len];
    for(int i=0;i<len; i++){
        printf("\n Vvedite %d element", i);
        scanf("%d", &arr[i]);
    }
    qsort(arr, 0, len, len);
    for(int i=0; i<len; i++){
        printf(" %d, ", arr[i]);
    }

    delete [] arr;

    return 0;
}

但它的输出非常奇怪。例如 - 它可以在&#34; 5 1 2 4 3&#34;并对其进行排序,但是当我例如键入&#34; 998 603 805 990 900&#34;理论上它绝对与计算机相同,它打印全0。 任何关于如何识别/解决问题的建议都非常感谢。

0 个答案:

没有答案