gpt4 book ai didi

c - 在 c 中使用指针编写合并排序的问题

转载 作者:太空宇宙 更新时间:2023-11-04 08:55:13 25 4
gpt4 key购买 nike

<分区>

我正在尝试编写一个带有指针的合并排序程序,它几乎可以正常工作,但问题是在输出中有一些“0”而不是排序数组的一些数字。

为了测试代码,您必须编写一个 txt 文件 prova.txt,其中有一个数组,一个数字代表行。例如:

prova.txt:

4
7
2
9
1
45
87

运行代码时,我期待输出

0: 1 
1: 2
2: 4
3: 7
4: 9
5: 45
6: 87

但是我明白了

0: 1 
1: 0
2: 0
3: 0
4: 0
5: 0
6: 2

此外,您有什么建议可以帮助我改进我的代码吗?

    #include <stdio.h>

int *merge(int left[], int right[], int n){
int *ordinato, i=0, j=0;
ordinato = malloc(sizeof(int)*n);
while(i+j < n){
if(left[i] < right[j]){
*(ordinato+i+j) = left[i];
i++;
}else{
*(ordinato+i+j) = right[j];
j++;
}
}
return ordinato;
}

int *mergeSort(int *daOrd, int n){
int k = 0, *left, *right, *ordinato;
ordinato = malloc(sizeof(int)*n);
left = malloc(sizeof(int)*(n/2));
right = malloc(sizeof(int)*(n-(n/2)));
if (n<2){
ordinato = daOrd;
}else{
for(k=0; k<n/2; k++)
*(left + k) = *(daOrd + k);
for(k=n/2; k<n; k++)
*(right + k -(n/2)) = *(daOrd + k);

left = mergeSort(left, n/2);
right = mergeSort(right, n-(n/2));
ordinato = merge(left, right, n);
}
return ordinato;
}

main(){
FILE *input;
input = fopen("prova.txt", "r");
if(!input) printf("Errore");

int tot = 100000;//is the maximum n

int *array;
array = malloc(sizeof(int)*tot);
int indice = 0;
while(fscanf(input,"%d", (array + indice)) != EOF) indice++;

int *ord = mergeSort(array, indice);

int k;
for(k=0; k<indice; k++) printf("%d: %d \n",k, *(ord+k));


getch();
fclose(input);
}

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com