我正在尝试创建冒泡排序,但我的代码存在问题。输出是:82345679.我希望它是:23456789。
package com.company;
public class Main {
public static void main(String[] args) {
// write your code here
int[] tab = {9,8,7,6,5,4,3,2};
int[] result = {9,8,7,6,5,4,3,2};
for (int i = 0; i < result.length; i++ ) {
if (i < result.length - 1 ) {
if (result[i] > result[i+1]) {
result = permute(result, i);
i = 0;
}
}
}
for (int i: result) {
System.out.print(i);
}
}
public static int[] permute (int[] tableau, int index) {
int temp;
temp = tableau[index];
tableau[index] = tableau[index+1];
tableau[index+1] = temp;
return tableau;
}
}
答案 0 :(得分:0)
你需要两个循环。
int swap;
for (int i = 0; i < ( result.length - 1 ); i++) {
for (int j = 0; j < result.length - 1; j++) {
if (result[j] > result[j+1]) {
swap = result[j];
result[j] = result[j+1];
result[j+1] = swap;
}
}
}
答案 1 :(得分:0)
你需要有2个循环才能将每个数字与整个数组进行比较..
冒泡分拣的例子
public static void bubbleSort(int[] numArray) {
int n = numArray.length;
int temp = 0;
for (int i = 0; i < n; i++) {
for (int j = 1; j < (n - i); j++) {
if (numArray[j - 1] > numArray[j]) {
temp = numArray[j - 1];
numArray[j - 1] = numArray[j];
numArray[j] = temp;
}
}
}
}
参考这个问题
答案 2 :(得分:0)
可以使用一个循环完成(虽然这不是通常的方式来呈现冒泡排序):
public static void main (String args[]) {
int[] tab = {9,8,7,6,5,4,3,2};
int i=1; // let's do the bubble sort again
while (i < tab.length) {
// loop invariant : t[0] <= t[1] .... <= t[i-1]
if (tab[i-1] < tab[i]) { // bubble here
swap(tab, i-1, i);
if (i>1) {
i = i-1; // one step to the left....
}
} else {
i = i +1; // one step to the right
}
}
for (int x: tab) {
System.out.print(x);
}
}
static void swap(int[] t, int i, int j) {
int x = t[i];
t[i] = t[j];
t[j] = x;
}
答案 3 :(得分:0)
问题在于for循环中i = 0
和i++
的组合。当您进入i = 0
分支时,由于1
,您最终会在i++
处重新启动。导致在8
移动到最后的第一次迭代后始终跳过9
。
因此,要么在-1
重启,要么使用while循环,只在else块中递增。例如:
int i = 0;
while (i < result.length - 1) {
if (result[i] > result[i+1]) {
permute(result, i)
i = 0;
} else {
i++;
}
}
但是,我建议不要使用单循环冒泡排序,因为算法复杂性更难看(它仍然是O(n^2)
,但只有一个循环,它可以给人的印象是它{{1 }})。