基于最小值的索引对数组进行排序?

薄雾FTW

我目前正在尝试学习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返回数组中最小项的索引,然后numbers[0]使用for循环将其设置为等于,然后是numbers[1],然后依次类推。old_num是数组中最低的数字,位于其先前的索引处。在这里,我尝试将最小值与处的值交换。numbers[i]但是,当我完成对整个数组的排序并打印出来时,我看到了10(当用户随机输入1-10的值时)在索引0处,然后其余数字按顺序排列。有人看到这里有什么问题吗?

瓦莱里·阿塔曼纽克(Valeri Atamaniouk)

解决方法:

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,并且由于最小值已初始化为value 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;
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

基于多个值对数组进行排序

如何基于值os子数组对数组进行排序

PHP - 根据索引=> 子数组的值对数组进行排序

如何使用定义的最小值和最大值对数据进行排序

对数组进行排序并检索排序的索引

在A *(A star)算法中实现开放集时,使用min()获取最小值或对数组进行排序,然后在Python中弹出第一个值吗?

基于另一个数组索引在 PHP 中对数组进行排序

如何在Elasticsearch中基于嵌套字段的最小值对结果集进行排序?

使用多个值对数组进行分组,并基于循环和排序数组中的组值对数组求和

在数组C ++中对最大值和最小值进行排序

在不排序的情况下查找数组中 n 个最小值的索引

按值但键索引对数组排序

根据值对数组排序的索引

首先基于另一个数组对数组中的值进行排序

如何通过值比较对数字数组进行排序并更改数组索引的位置

PHP按第3层的子数组值对数组进行排序,但带有索引

PHP根据值对数组进行排序

根据值对数组进行排序

按字母值对数组进行排序

在输入值的同时对数组进行排序

根据段数对数组值进行排序

使用 Powershell 对数组值进行排序

根据属性值对数组进行排序

按值对数组进行排序

用最小和最大值交替对数组进行排序

基于最小值和最大值的新数组

基于Javascript中相同属性的多个值对数组进行排序

基于数值对数组进行排序时处理空值位置

Python-如何基于字典对数组中的值进行排序和替换