java - 仅通过单个循环进行冒泡排序

标签 java sorting

我正在通过冒泡排序对数字进行排序。我想看看是否可以仅使用单个循环来完成这种排序,因为我们在冒泡排序中使用 2 个 for 循环。有人可以告诉我如何做到这一点以及是否可能吗?

最佳答案

冒泡排序的工作原理是移动彼此相邻的值对。例如,您有以下列表:

列表 = {5, 3, 6, 11, 2}

第一次迭代,将逐对进行,如有必要,交换位置:

  1. 比较 5 和 3。3 较小,因此您切换 => {3, 5, 6, 11, 2}
  2. 比较 5 和 6。5 较小,因此您无需执行任何操作 => {3, 5, 6, 11, 2}
  3. 比较 6 和 11。6 较小,因此您无需执行任何操作 => {3, 5, 6, 11, 2}
  4. 比较 11 和 2。2 更小,所以你 => {3, 5, 6, 2, 11}

我们已经完成了循环的 1 次迭代,如您所见,列表未排序。需要迭代多次才能实现排序。

不过,可以做的是仅使用 1 个循环,不断迭代直到排序,这可以通过基于原始冒泡排序开关标志更改迭代索引来实现:

bool valuesSwitched = false;
int list[5] = {5, 3, 6, 11, 2};
int len = 5;
for(int i = 1; i <= len; i++)
{
    if(i == len)
    {
        if(!valuesSwitched) break;

        valuesSwitched = false;
        i = 1;
    }
    if(list[i - 1] > list[i])
    {
        int temp = list[i - 1];
        list[i - 1] = list[i];
        list[i] = temp;
        valuesSwitched = true;
    }
}

关于java - 仅通过单个循环进行冒泡排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36794691/

相关文章:

java - 通过代码了解OOP中的封装

c++ - 根据 C++ 中另一个数组的成员对数组进行排序

java - java中排序数组包含一些数组

javascript - 在 Javascript 中按降序对字符串进行排序(最有效)?

java - EventQueue 和 EventDispatch 错误

java - 文件菜单上显示不可点击的文本

java - S3 上传中的加密

java - 创建对象数组时出现 NullPointerException

ios - sortedArrayUsingComparators 不按升序对数字进行排序

python - 如何使用 python 按特定顺序对文件名进行排序