我有以下代码用于冒泡排序,但它根本没有排序。如果我删除我的布尔值然后它的工作正常。我明白,因为我的[0]比其他所有元素都要小,所以没有任何交换可以帮助我。
package com.sample;
public class BubleSort {
public static void main(String[] args) {
int a[] = { 1, 2, 4, 5, 6, 88, 4, 2, 4, 5, 8 };
a = sortBuble(a);
for (int i : a) {
System.out.println(i);
}
}
private static int[] sortBuble(int[] a) {
boolean swapped = true;
for (int i = 0; i < a.length && swapped; i++) {
swapped = false;
System.out.println("number of iteration" + i);
for (int j = i+1; j < a.length; j++) {
if (a[i] > a[j]) {
int temp = a[i];
a[i] = a[j];
a[j] = temp;
swapped = true;
}
}
}
return a;
}
}
答案 0 :(得分:2)
这与你的基本相同,但工作效率更高:
private static int[] bubblesort(int[] nums)
{
boolean done = false;
for (int i = 0; i < nums.length && !done; i++)
{
done = true;
for (int j = nums.length-1; j > i; j--)
{
if (nums[j] < nums[j-1])
{
int temp = nums[j];
nums[j] = nums[j-1];
nums[j-1] = temp;
done = false;
}
}
}
return nums;
}
在i th 迭代结束时,我们知道第一个i元素已经排序,因此我们不再需要查看它们了。我们需要布尔值来确定是否需要继续。如果没有互换,那么我们就完成了。我们可以删除布尔值,它仍然可以工作,但效率会降低。
答案 1 :(得分:1)
你的冒泡排序错了吗?
private static int[] sortBuble(int[] a) {
boolean swapped = true;
int n = a.length;
for (int i = 0; i < n && swapped; i++) {
swapped = false;
int newn = 0;
System.out.println("number of iteration" + i);
for (int j = 1; j < a.length; j++) {
if (a[j-1] > a[j]) {
int temp = a[j-1];
a[j-1] = a[j];
a[j] = temp;
swapped = true;
newn = j;
}
}
n = newn;
}
return a;
}
答案 2 :(得分:0)
它被称为标记冒泡排序。它主要有助于节省时间。它检查阵列位置是否已排序。如果它被排序则会中断,并转移到第二次执行。
并且代码可以重写为: -
for (int j = 1; j < a.length; j++) {
if (a[j-1] > a[j]) {
int temp = a[j-1];
a[j-1] = a[j];
a[j] = temp;
swapped = true;
}
}
if(!swapped)
break;
}