gpt4 book ai didi

Java - 数组冒泡排序

转载 作者:搜寻专家 更新时间:2023-11-01 02:23:45 25 4
gpt4 key购买 nike

1  |  int[] numbers = { 5, 8, 14, 1, 5678 };
2 | int tempVar;
3 | for (int i = 0; i < numbers.length; i++)
4 | {
5 | for(int j = 0; j < numbers.length; j++)
6 | {
7 | if(numbers[i] > numbers[j + 1])
8 | {
9 | tempVar = numbers [j + 1];
10 | numbers [j + 1]= numbers [i];
11 | numbers [i] = tempVar;
12 | }
13 | }
14 | }
15 | for (int i = 0; i < numbers.length; i++)
16 | {
17 | System.out.println(numbers[i].toString());
18 | }

我是Java新手,自学。我有一些问题 冒泡排序。

我的问题出在 57 行。据我了解,外 循环开始于i0,然后内层循环从j开始运行是0并且 每次增加1,直到j达到4,之后外层循环 将前进到 i1。因此,在外层循环前进到 i 之前 1,应该会发生以下情况。

i=0时,数字i=5则内循环运行:

j=0时,数j=5

j=1时,数j=8

j=2时,数j=14

j=3时,数j=1

j=4时,数j=5678

那么如果数字 i 大于数字 j+1,则这两个数字是 交换。

然后我们将 55 进行比较,然后将 58 进行比较,然后将 514,然后是 5 使用1,然后使用5 5678,这与冒泡排序的方式不同 有效(将 58 进行比较,然后将 814 进行比较,然后将 14 进行比较使用 1 和 然后是 15678)。

我无法理解 57 行中的代码如何导致 以应该在的方式比较两个相邻的数字 冒泡排序。任何人都可以指出我认为错误的地方吗?

如果有人更详细地指出如何,将不胜感激 57 行有效。如果一步一步来就更好了 可以提供故障。谢谢!

最佳答案

观看this从 35.00 左右开始,这就是冒泡排序。你的理解是正确的。冒泡排序比较元素 1、2 - 如果 elem 1 > elem 2 然后交换它们 - 然后是 2,3,然后是 3,4 等等,直到 n-1 和 n。在第一遍中,最大的元素是元素 n。所以在第二遍中你不需要检查最后一个元素,你只需要检查到第 n-1 个元素。

对于每个 channel ,您使用索引“j”,对于所有 channel ,您使用索引“i”。

所以你在交换过程中不要使用索引“i”。

所以在你的第 5 行和第 7 行

5  |       for(int j = 0; j < numbers.length; j++)
6 | {
7 | if(numbers[i] > numbers[j + 1])

不要使用索引“i”进行比较,而是这样做

7  |                if(numbers[j-1] > numbers[j])

从 1 开始 j。

正如我所说,在使用索引“j”的每次传递之后,您需要在下一次减少一个元素,因为每次传递都将最大的元素放在该传递的最后位置。因此,您无需担心通过后的最后一个元素。所以你的第五行变成了

5  |       for(int j = 1; j < numbers.length-i; j++)

在每次通过后,'j' 最多只减少一个元素。

所以整个循环

for(i=0 to n)
{
for(j=1 to n-i)
{
if(array[j-1]>array[j])
swap(array[j-1],array[j]);
}
}

关于Java - 数组冒泡排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31397823/

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