0

这是我在 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;
}

但它有非常奇怪的输出。例如 - 它在“5 1 2 4 3”上工作正常并对其进行排序,但是当我例如输入“998 603 805 990 900”时,理论上对于计算机来说绝对相同,它会打印所有 0。关于如何非常感谢识别/解决问题。

4

0 回答 0