C 中的冒泡排序帮助。来自源代码的基于行的问题

BUBBLE SORT Help in C . line-based questions from a source code

http://www.sanfoundry.com/c-program-sorting-bubble-sort/

我的问题是:

  1. 第 28 行:为什么 num - i - 1?
  2. 第 30 行:if 条件是什么意思?特别是,为什么 j + 1?
  3. 如何让排序后的数组元素随机显示?没有升序或降序?
  4. 如何区分显示的随机数?
  1. 因为我们要在索引中加一,所以我们不能循环到 num - i 否则我们会过冲。
  2. 将索引加一以查看并比较第 j:th 与 (j + 1):th 元素。
  3. 这没有多大意义。如果要随机显示,就不要排序。 "Shuffle" 是随机化数组的术语。
  4. 不知道你的意思。

1) num 是要排序的数字的个数。 i 是已经排序的元素数,1 是将要排序的元素数。 在循环中,它比较 array[j] 和 array[j+1] 处的元素,看是否需要交换它们。当 j 是最后一个测试并且 j+1 是最后一个测试时,循环应该停止。这就是为什么j从0开始,到j为num - i - 1时结束。

2) 它比较位置j的数字和位置j+1的数字。如果您将数字从左到右依次写在一行中,这将是位置 j 处的数字与它后面(右边)的数字之间的比较。

3) 您必须创建一个元素索引数组。该数组将使用从 0 到 num-1 的值进行初始化。然后您将遍历该数组并将该条目与随机选择的另一个条目交换。为此,您选择一个介于 0 和 num-1 之间的随机数。这将打乱元素索引数组。 要以随机顺序打印数字,您可以使用存储在元素索引数组中的值作为下一个要显示的数字的索引。这样可以确保顺序是随机的,每个数字只显示一次并且显示所有数字。

4°我不明白这个问题。

第 30 行代码正在执行 j+1 这就是条件为 j<num-i-1 的原因,因此不会发生数组越界异常。

您可以将逻辑更改为

for (i = 0; i < num; i++)
    {
        for (j = 1; j < (num - i); j++)
        {
            if (array[j-1] > array[j])
            {
                temp = array[j];
                array[j] = array[j-1];
                array[j-1] = temp;
            }
        }
    }

如果你想随机显示数组就不需要排序!!因为数组中已经没有顺序了。

您可以编写自己的逻辑来随机显示数组元素。