gpt4 book ai didi

c - 根据最小值索引对数组进行排序?

转载 作者:太空宇宙 更新时间:2023-11-04 04:33:56 26 4
gpt4 key购买 nike

我目前正在尝试学习 C,我在网上找到的练习让我创建了一个函数,该函数返回数组中最小值的索引。这是我的功能:

int return_index_of_minimum(int A[10], int i, int j){
int minimum_value = A[i];
int index_to_return = 0;
for (int index = i; index < j; index++){
if (A[index] < minimum_value){
minimum_value = A[index];
index_to_return = index;
}
}
return index_to_return;
}

i 和 j 是函数应该查找的下限和上限数字。例如,如果 i 是 4,j 是 8,这意味着函数将返回索引 4 和 8 之间的最小值的索引。

这是我的主要功能:

#include <stdio.h>

int main(){
int numbers[10];
int user_input = 0;
for (int i = 0; i < 10; i++){
printf("Please enter a number: ");
scanf_s("%d", &user_input);
numbers[i] = user_input;
}


for (int i = 0; i < 10; i++){
int index_of_min_value = return_index_of_minimum(numbers, i, 10);
int old_num = numbers[index_of_min_value];
int new_num = numbers[i];

numbers[index_of_min_value] = new_num;
new_array[i] = old_num;
}
for (int i = 0; i < 10; i++){
printf("%d\n", new_array[i]);
}
}

用户首先输入一串数字,然后用用户的值填充数组。这个想法是使用 return_index_of_minimum 返回数组中最小项的索引,然后使用 for 循环将其设置为等于 numbers[0],然后 numbers[1],依此类推。 old_num 是数组中最低的数字,位于其先前的索引处。在这里,我试图用 numbers[i] 中的任何值交换该最小值但是,当我对整个数组进行排序并打印出来时,我看到 10 (当用户为值随机输入 1-10 时)在索引 0 处,然后其余数字按顺序排列。有人看到这里出了什么问题吗?

最佳答案

这是一个修复:

int return_index_of_minimum(int A[10], int i, int j){
int minimum_value = A[i];
int index_to_return = i;
...
}

不幸的是,这段代码没有对无效参数的保护,但除此之外,这就是您一直在寻找的答案。

原因是在调用 index_of_minimum(a, 9, 10) 时:循环只对 index = 9 执行一次迭代,因为最小值已经初始化到值 a[9]index_to_return 由于条件检查而未更新。

这是一种不同的方法,没有相同的问题:

int return_index_of_minimum(int A[10], int i, int j){
/* assuming i < j */
int minimum_value = A[i];
int index_to_return = i; /* First element is a candidate */
for (int index = i + 1; index < j; index++){
/* Iterate from second element */
if (A[index] < minimum_value){
minimum_value = A[index];
index_to_return = index;
}
}
return index_to_return;
}

关于c - 根据最小值索引对数组进行排序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33143979/

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