Java冒泡排序

时间:2015-10-20 15:40:26

标签: java

我正在尝试创建冒泡排序,但我的代码存在问题。输出是: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;
    }
}

4 个答案:

答案 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;
            }

        }
    }
}

参考这个问题

  

Sorting an Array of int using BubbleSort

答案 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 = 0i++的组合。当您进入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 }})。