java 数组大小为7时的冒泡排序算法问题

pw136qt2  于 2023-01-01  发布在  Java
关注(0)|答案(2)|浏览(137)
public class BubbleSort {
   public static void main(String[] args) {
      int[] arr1 = {2, 34, 65, 65, 10, 32, 45};
      int[] arr2 = {2, 65, 65, 10, 32, 45};
      int[] arr3 = {2, 34, 65, 65, 32, 45};
      int[] arr4 = {2, 12, 15, 34, 65, 65, 32, 45};
      int[] arr5 = {2, 34, 65, 65, 20, 32, 45};
      bubbleSort(arr1, 1);
      bubbleSort(arr2, 2);
      bubbleSort(arr3, 3);
      bubbleSort(arr4, 4);
      bubbleSort(arr5, 5);
   }

   public static void bubbleSort(int[] arr, int id) {
      for (int i = 0; i < arr.length; i++) {
         for (int j = 0; j < arr.length - 1; j++) {
            if (arr[j] > arr[j + 1]) {
               int tmp = arr[j + 1];
               arr[j + 1] = arr[j];
               arr[j] = tmp;
            }
         }
         System.out.println("This is Arr " + id + " " + arr[i]);
      }
   }
}

我在java中的冒泡排序实现中遇到了一个问题,我在升序模式下排序,但是正如你所看到的,当你运行bubbleSort(arr1)bubbleSort(arr5)时,它返回了奇怪的值,这不是我所期望的结果。

    • 结果**

arr1 resultarr5 result

xytpbqjk

xytpbqjk1#

你的函数是正确的,但是你的print是错误的,你命令了你的arr5你应该在所有迭代之后打印他,你的println在for之一里面,而它仍然在命令。
这是我把println放在函数外的一个输出。
Code
格式不对但我现在能做的就是这个

public class BubbleSort {
   public static void main(String[] args) {
      int[] arr5 = {2, 34, 65, 65, 20, 32, 45};
      bubbleSort(arr5, 5);
      
    int n = arr5.length;
    for (int i = 0; i < n; ++i)
        System.out.print(arr5[i] + " ");
    System.out.println();
   }

   public static void bubbleSort(int[] arr, int id) {
      for (int i = 0; i < arr.length; i++) {
         for (int j = 0; j < arr.length - 1; j++) {
            if (arr[j] > arr[j + 1]) {
               int tmp = arr[j + 1];
               arr[j + 1] = arr[j];
               arr[j] = tmp;
            }
         }
         
      }
   }
}
y53ybaqx

y53ybaqx2#

你必须考虑BubbleSort是如何工作的,如果j位置的元素大于j+1位置的元素,那么你要检查if条件,如果不满足这个条件,元素就不会交换。
你的条件确保,在每一次i迭代之后,最大的元素在数组的末尾。
当你在每次迭代中检查你可能遇到的数组的第i个元素时,看看你的第一个数组,下面是每次迭代的步骤:

arr = {2, 34, 65, 65, 10, 32, 45};

// arr                               i
// {2, 34, 65, 10, 32, 45, 65};  arr[0] = 2
// {2, 34, 10, 32, 45, 65, 65};  arr[1] = 34
// {2, 10, 32, 34, 45, 65, 65};  arr[2] = 32
// {2, 10, 32, 34, 45, 65, 65};  arr[3] = 34
// {2, 10, 32, 34, 45, 65, 65};  arr[4] = 45
// {2, 10, 32, 34, 45, 65, 65};  arr[5] = 65
// {2, 10, 32, 34, 45, 65, 65};  arr[6] = 65

i=1处,arr的元素是34的原因是,当检查时,您比较的是假的34 > 65,因此34停留在位置1

相关问题