我正在通过冒泡排序对数字进行排序。我想看看是否可以仅使用单个循环来完成这种排序,因为我们在冒泡排序中使用 2 个 for 循环。有人可以告诉我如何做到这一点以及是否可能吗?
最佳答案
冒泡排序的工作原理是移动彼此相邻的值对。例如,您有以下列表:
列表 = {5, 3, 6, 11, 2}
第一次迭代,将逐对进行,如有必要,交换位置:
- 比较 5 和 3。3 较小,因此您切换 =>
{3, 5, 6, 11, 2}
- 比较 5 和 6。5 较小,因此您无需执行任何操作 =>
{3, 5, 6, 11, 2}
- 比较 6 和 11。6 较小,因此您无需执行任何操作 =>
{3, 5, 6, 11, 2}
- 比较 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/