我正在通过冒泡排序对数字进行排序。因为我想看看这个排序是否可以通过使用单循环来完成,因为我们在冒泡排序中使用了2个循环。有人可以告诉我如何做,甚至可能吗?只用单个循环进行冒泡排序
回答
气泡排序通过移动彼此相邻的值对来工作。因此,举例来说,你有这样的名单:
list = {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;
}
}
由于您的解决方案没有提供正确的输出,它不起作用。 – sanketprabhune
我没有时间去测试它,但是我把它作为一个例子说明如何用一个循环来完成它。关键概念是不退出循环,直到没有对其进行更改。它给出了什么输出? – Nadir
在最好的情况下,我们可以使用O(n)进行冒泡排序。
Bubble Sort中的最好情况是完整数组排序的时候。在这种情况下,您会比较第一遍中的相邻元素,并记录您做出的交换次数。
由于完整的数组排序,交换次数将为零。因此你会跳出循环。
我们可以通过对传统的气泡排序算法进行小改动来得到答案。
public class BubbleSort {
public static void main(String args[]){
int arr[] = {1,2,3,4,5,6};
BubbleSort bubbleSort = new BubbleSort();
bubbleSort.sort(arr);
for(int i=0; i <arr.length; i++){
System.out.print(arr[i]);
}
}
public void sort(int arr[]){
boolean flag = true;
for(int i=0; i < arr.length -1; i++){
for(int j=0; j<arr.length-i-1; j++){
if(arr[j]>arr[j+1]){
int temp = arr[j];
arr[j] = arr[j+1];
arr[j+1] = temp;
flag=false;
}
}
if(flag){
break;
}
}
}
}
在你的解决方案中你仍然使用2 for循环,即使你使用break语句,它仍然有2个for循环。 – sanketprabhune
- 1. 冒泡排序
- 2. 冒泡排序
- 3. 冒泡排序执行
- 4. 使用冒泡排序对列表进行排序
- 5. 平行冒泡排序使用OpenMP
- 6. 冒泡排序 - 为什么附加循环
- 7. 如何在java中对一个arraylist进行冒泡排序?
- 8. C++外部冒泡排序
- 9. Python的冒泡排序
- 10. 冒泡排序链表
- 11. 冒泡排序在c
- 12. 冒泡排序和IndexOutOfRangeException
- 13. 冒泡排序错误
- 14. 冒泡排序的对象?
- 15. 冒泡排序混淆
- 16. 冒泡排序C#窗体
- 17. 如何使用C++中的指针进行冒泡排序?
- 18. 用字符串进行泡泡排序
- 19. 对bash中的命令行参数进行冒泡排序
- 20. 冒泡排序输出没有排序
- 21. 如何对字符串数组进行冒泡排序?
- 22. 冒泡排序算法不起作用
- 23. Java冒泡排序不起作用
- 24. 在haskell中通过冒泡排序在排序的索引中进行搜索
- 25. 使用冒泡排序的二进制搜索
- 26. 为什么冒泡排序O(n^2)?
- 27. 冒泡排序和foreach索引
- 28. 具有冒泡排序的阵列
- 29. 冒泡排序算法实现
- 30. 通过冒泡排序定数组
当然,您可以将两个嵌套1变量循环线性化为一个2变量循环,但它会更难以阅读和理解,复杂性也不会改变。你确切的问题是什么? –
@sasha,我想只用一个循环对数组进行排序。不多于此。我正在使用Java。我仍然在找到适合我的查询的解决方案。所有给出的答案都无法正常工作。 – sanketprabhune
@vidit,那个链接也没用。 – sanketprabhune