【问题标题】:Sorting Arrays C++对数组排序 C++
【发布时间】:2020-10-01 10:33:22
【问题描述】:

显示如何对数组进行排序的 C++ 书籍的代码摘录:

void sort(int array[], int size)
{
    for(int i= 0; i < size; i++)
    {
        int index = findSmallestRemainingElement(array, size, i);
        swap(array,i,index);
    }
}
int findSmallestRemainingElement(int array[], int size, int index)
{
    int index_of_smallest_value = index;
    for (int i = index + 1; i < size; i++)

    {
        if (array[i] < array[index_of_smallest_value])
        {
            index_of_smallest_value= i;
        }
    }
    return index_of_smallest_value;
}
void swap(int array[], int first_index, int second_index)
{
    int temp=array[first_index];
    array[first_index] = array[second_index];
    array[second_index] = temp;
}

这本书并没有很好地解释这部分,所以我有几个关于函数的问题。

数组的大小和索引有什么区别?

这个问题的答案可能会帮助我更多地理解这些功能,但万一它没有......

findSmallestRemainingElement(int array[], int size, int index) 函数和void swap(int array[], int first_index, int second_index) 函数究竟是如何工作的?

显然我知道每个函数的总体用途,只是我不理解它的一行一行以及代码所做的不同事情。

感谢任何花时间帮助我理解这一点的人!

【问题讨论】:

  • 您的第一个问题与函数关系不大。数组具有大小,即条目总数,索引是在数组中找到特定条目的位置。
  • size 是数组的大小,例如size 对于 {0, 1, 2, 3, 4, 5, 6, 7, 8, 9}10index 指向当前正在考虑的元素。刚刚显示的数组的有效索引是 0 到 9。顾名思义,findSmallestElement 从传入的索引开始查找具有最小值的元素的索引。一旦找到,swap 交换第一个元素尚未用那个排序,然后逻辑继续下一个元素。
  • 一本教你将int用于你应该扔掉的数组索引变量的书。

标签: c++ arrays sorting selection-sort function-definition


【解决方案1】:

数组的大小和索引有什么区别?

数组是通过指定元素的数量来声明的,或者元素的数量可以根据数组声明中使用的初始化器的数量来确定。

例如

int a1[10];

数组a110 元素声明。

或者

int a2[] = { 1, 2, 3, 4, 5 };

数组a25 元素声明。

在函数的上下文中,数组的大小是数组中元素的数量。

所以函数排序声明如下

void sort(int array[], int size);

可以这样称呼

sort( a1, 10 );

sort( a2, 5 );

如果您只想对数组的一部分进行排序,您可以指定比实际大小更少的元素数。

要访问数组的元素,您可以使用 subscipt 运算符。例如输出数组a2的元素你可以写

for ( int i = 0; i < 5; i++ )
{
    std::cout << a[i] << ' ';
}
std::cout << '\n';

所以循环中使用的变量i 放置了索引的作用来访问数组的具体元素。

findSmallestRemainingElement(int array[], int size, int index) 函数和 void swap(int array[], int first_index, int second_index) 函数是如何工作的?

例如函数swap声明如下

void swap(int array[], int first_index, int second_index);

用于交换数组的两个元素的值。

例如,如果你想交换上面显示的数组a2 的第一个和最后一个元素,那么你可以调用函数

swap( a2, 0, 4 );

除了数组本身之外,将目标元素的两个索引传递给函数。

函数定义可以看起来像这样

void swap(int array[], int first_index, int second_index)
{
    int temp = array[first_index];
    array[first_index] = array[second_index];
    array[second_index] = temp;
}

至于函数sort本身则使用选择排序方法。它基于找到数组中最小元素的索引,并将第一个元素的值与最小元素的值交换。然后对数组的第二个元素执行相同的操作,依此类推。

【讨论】:

    【解决方案2】:

    数组的大小和索引有什么区别?

    数组的大小是其中元素的数量。虽然,需要注意的是,在 C++ 中,这也可以指数组使用的字节数,这就是为什么更常用术语“长度”的原因,但这里不是这样。

    您似乎认为索引是数组的属性,但事实并非如此。数组的索引是其元素从左到右的顺序编号。所以,a[0] 是第 0 个元素(“索引 0 处的元素”),a[1] 是第一个元素(索引 1),等等。

    这个问题的答案可能会帮助我更多地理解这些功能,但万一它没有......

    它可能会,所以我将保留它。

    【讨论】:

      猜你喜欢
      • 2018-04-20
      • 2016-04-19
      • 1970-01-01
      • 2022-01-03
      • 2021-12-26
      • 1970-01-01
      • 2011-04-23
      • 2017-02-24
      • 2013-12-24
      相关资源
      最近更新 更多