这是我在 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。关于如何非常感谢识别/解决问题。