gpt4 book ai didi

c - 我的归并排序 C 中的逻辑错误是什么

转载 作者:行者123 更新时间:2023-11-30 20:33:05 26 4
gpt4 key购买 nike

编辑:这绝不是我之前问题的重复。我的代码已根据我从上一个线程收到的答案进行了相应更改,但我仍然收到这些错误,这些错误与我上次询问的错误不同。

我正在编写代码来对用户使用合并排序输入的间隔进行排序。它从用户处获取输入,并将其存储在结构 interval 中,并使用该结构按升序排序。它使用正值和负值来检查间隔边是打开还是关闭,但这与正在执行的代码无关。下面是我的代码和我得到的输出类型的示例。提前非常感谢大家的帮助。

#include <stdio.h>

typedef struct interval{
int num_left, denum_left;
int num_right, denum_right;
int left_state, right_state;
}interval;

interval combine(interval x, interval y);
int combineCheck(interval x, interval y);
int valueCheck(interval x, interval y);
void mergeSort(interval x[], int l, int r);
void merge(interval x[], int l, int m, int r);
interval takeInput();

int main(){
int response, i;
char d;
printf("Enter the number of intervals to input: ");
scanf("%d", &response);
interval data[response];

for(i = 0; i < response; i++){
data[i] = takeInput();
}

mergeSort(data, 0, response-1);
printf("%d %d %d\n", data[0].num_left, data[1].num_left, data[2].num_left);
for(i = 0; i < response; i++){
printf("%d/%d %d/%d\n", data[i].num_left, data[i].denum_left, data[i].num_right, data[i].denum_right);
}

}

interval takeInput(){
interval temp;
printf("Enter left numerator: ");
scanf("%d", &temp.num_left);
printf("Enter left denominator: ");
scanf("%d", &temp.denum_left);
printf("Enter right numerator: ");
scanf("%d", &temp.num_right);
printf("Enter right denominator: ");
scanf("%d", &temp.denum_right);
printf("\n");

if(temp.num_left < 0){
temp.num_left = temp.num_left*-1;
temp.left_state = -1;}
else{
temp.left_state = 0;}

if(temp.num_right < 0){
temp.num_right = temp.num_right*-1;
temp.right_state = -1;}
else{
temp.right_state = 0;}
return temp;
}

int combineCheck(interval x, interval y){
int left, right;
left = x.num_right * y.denum_left; //used to find relationship between 2 fractions
right = y.num_left * x.denum_right;

if(left == right && (x.right_state + x.left_state) == 0){
return 1;
}
else if(left > right){
return 1;
}
return 0;
}

interval combine(interval x, interval y){
int left, right; //used to check if one interval is all encompassing
left = x.num_right * y.denum_right;
right = x.denum_right * y.num_right;

interval temp;
temp.num_left = x.num_left;
temp.denum_left = x.denum_left;
temp.left_state;
if(left > right){
temp.num_right = x.num_right;
temp.denum_right = x.denum_right;
temp.right_state = x.right_state;
return temp;
}
temp.num_right = y.num_right;
temp.denum_right = y.denum_right;
temp.right_state = y.right_state;
return temp;
}

int valueCheck(interval x, interval y){
int first, second; //used to check values
first = x.num_left * y.denum_left;
second = y.num_left * x.denum_left;
if(first > second){
return 1;
}
return -1;
}

void mergeSort(interval x[], int l, int r){
if(l < r){
int m = l + (r-l)/2;

mergeSort(x, l, m);
mergeSort(x, m+1, r);
merge(x, l, m, r);
}
}

void merge(interval arr[], int l, int m, int r){
int i, j, k;
int n1 = m-l +1;
int n2 = r-m;

interval L[n1], R[n2];

for(i = 0; i < n1; i++)
L[i] = arr[l + i];
for(j = 0; j < n2; j++)
R[j] = arr[m + 1 + j];
j = 0;
i = 0;
k = l;
while(i < n1 && j < n2){
if(valueCheck(L[i], R[j]) == -1){
arr[k] = L[i];
i++;
}
else{
arr[k] = R[j];
j++;
}
}

while(i < n1){
arr[k] = L[i];
i++;
k++;
}

while(j < n2){
arr[k] = R[j];
j++;
k++;
}
}

enter image description here

输出为文本:

Enter the number of intervals to input: 5
Enter Left numerator: 1
Enter left denominator: 1
Enter right numerator: 1
Enter right denominator: 1

Enter Left numerator: 2
Enter left denominator: 1
Enter right numerator: 2
Enter right denominator: 1

Enter Left numerator: 3
Enter left denominator: 1
Enter right numerator: 3
Enter right denominator: 1

Enter Left numerator: 4
Enter left denominator: 1
Enter right numerator: 4
Enter right denominator: 1


Enter Left numerator: 5
Enter left denominator: 1
Enter right numerator: 5
Enter right denominator: 1

5 5 3
5/1 5/1
5/1 5/1
3/1 3/1
5/1 5/1
5/1 5/1

最佳答案

只是在条件之后缺少 K 的迭代

关于c - 我的归并排序 C 中的逻辑错误是什么,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46348739/

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