我的冒泡排序实现是否正确?

时间:2016-05-12 21:31:47

标签: java bubble-sort

public class MyBubbleSort {

public static void bubbleSort(int[] a, int n)   {

    int i, j, temp;

    for (i = 0; i <= (n-2); i++) {
        for (j = i + 1; j <= (n-1); j++) {
            if (a[j] < a[i])    {
                temp = a[i];
                a[i] = a[j];
                a[j] = temp;
            }
        }
    }
}
}

当我进行调试时,它给了我一个排序数组,但我只想100%确定。

2 个答案:

答案 0 :(得分:0)

你可以稍微整理一下代码:

  1. 使其扩展界面使用单个方法排序sort(int[] a, int n)
  2. MyBubbleSort方法应该实现所述接口而不是静态的。

  3. int ij应在相应的for声明中声明。

  4. temp应在内部if内声明。
  5. 如果您需要传入数组的长度,这是值得怀疑的,因为这是Java数组类型的属性。传递长度的唯一时间是你打算对子数组进行排序。

答案 1 :(得分:0)

你正在做一个正确的冒泡排序!在“if”语句中,如果两个相邻值的排序不正确,则表示您正在正确交换它们。这是冒泡排序的原则:重复此过程,直到您的数组正确排序。 https://www.youtube.com/watch?v=lyZQPjUT5B4

然而,你在代码中做了一些奇怪的事情!正如zapl在评论中所说,你不需要这个“n”参数,因为你可以简单地在你的方法中获得数组的大小。

也更喜欢使用“&lt; length”,“&lt; length - 1”而不是你的&lt; =如果你认为的话更直观

public static void bubbleSort(int[] tab)   {
        int n = tab.length ; 
        for (int i = 0; i < n-1; i++) {
            for (int j = i + 1; j < n ; j++) {
                if (tab[j] < tab[i])    {
                    int temp = tab[i];
                    tab[i] = tab[j];
                    tab[j] = temp;
                }
            }
        }
    }