Java如何重复排序直到在冒泡排序中没有进行交换?
Posted
技术标签:
【中文标题】Java如何重复排序直到在冒泡排序中没有进行交换?【英文标题】:Java How do i repeat sort until no swaps are done in bubblesort? 【发布时间】:2022-01-20 23:09:57 【问题描述】:我将选取 10 个元素并对它们进行冒泡排序。我想添加一个重复排序的算法,直到不需要交换以提高效率。 基本上我想:
重复直到没有完成一次交换 对于元素 1 到 (n-1) 将元素值 1 的内容与下一个值的内容进行比较 如果值 1 大于值 2 然后交换值这是我到目前为止所做的:
//create array
int[] iList = new int[10];
Scanner sc = new Scanner(System.in);
//takes in array input for 10 numbers
System.out.println("Enter a array of numbers ");
for(int i = 0; i< 10; i++ )
int num = i + 1;
System.out.println("Enter number " + num);
iList[i] = sc.nextInt();
//Bubble sorts the array
System.out.println("The array =");
for(int a = 0; a < iList.length; a++ )
for(int b = a+1; b < iList.length; b++)
if(iList[a] > iList[b])
int iTemp = iList[a];
iList[a] = iList[b];
iList[b] = iTemp;
System.out.println("Progress = " + Arrays.toString(iList) );
```
【问题讨论】:
创建一个bool
来存储它是否曾经在迭代中被交换过。 break
如果没有
在外循环的开头引入了一个boolean
变量,在if里面改变那个boolean
变量的值,检查这个变量在外循环结束前是否改变了。
【参考方案1】:
这是我的实现:
public static void sort(int[] nums)
boolean isSwapped;
int size = nums.length - 1;
for (int i = 0; i < size; i++)
isSwapped = false;
for (int j = 0; j < size - i; j++)
if (nums[j] > nums[j+1])
int temp = nums[j];
nums[j] = nums[j + 1];
nums[j + 1] = temp;
isSwapped = true;
if (!isSwapped) break;
System.out.println("Sorted Array: " + Arrays.toString(nums));
【讨论】:
以上是关于Java如何重复排序直到在冒泡排序中没有进行交换?的主要内容,如果未能解决你的问题,请参考以下文章