HOWTO · Java

在 Java 中不使用 sort() 方法对数组进行排序

了解如何在不使用 sort() 方法的情况下在 Java 中对数组进行排序

本页内容

本指南将教我们在 Java 中不使用 sort() 方法对数组进行排序。通常有三种方法可以对数组进行排序。这三种算法在对任何数组进行排序时都非常有效。让我们更多地了解这些算法。

在 Java 中不使用 sort() 方法对数组进行排序 - 冒泡排序

让我们了解一下冒泡排序的概念,它是最简单的排序算法。基本上,在这个算法中,你反复交换数组中的相邻元素。如果它们的顺序不正确,算法将交换两个元素。看一下演示文稿。

在 Java 中不使用 sort() 方法对数组进行排序 - 冒泡排序

如果你查看上面提供的图片,你可以看到两个相邻元素的交换。最后,我们有排序的数组。如果有任何混淆,请查看此冒泡排序算法的代码。

public class Main {
  public static void main(String[] args) {
    int[] arr = new int[] {5, 4, 3, 8, 32, 768, 564, 95, 172, 1500, 859, 754};
    // Example Array To sort...
    for (int i = 0; i < arr.length; i++) { // Loop over java Array  outer Loop use
      for (int j = i + 1; j < arr.length; j++) { // Loop over java array
        int tmp = 0; // tempraory variable in order to compare.
        if (arr[i] > arr[j]) { // compare outer loop object with inner loop
          tmp = arr[i]; // if greater than swapping.
          arr[i] = arr[j]; // Swaping code here.
          arr[j] = tmp;
        }
      }
    }
    // After Sorting Printing The Value.............

    for (int i = 0; i < arr.length; i++) {
      System.out.println(arr[i]);
    }
  }
}

输出:

3
4
5
8
32
95
172
564
754
768
859
1500

外循环仅用于传递数组,而内循环在每次传递中交换相邻的无序元素。在最后一遍结束时,我们留下了已排序的数组。

在 Java 中不使用 sort() 方法对数组进行排序 - 选择排序

选择排序算法通过搜索数组中的最小元素并将其放置在所述数组的开头来工作。每次通过,我们都会找到下一个最小的元素并将其放在下一个。最终,我们得到一个包含两个子数组的数组。一个子数组是位于数组开头的排序数组。另一个子数组是未排序的。

在每次传递中,我们按升序移动。如果我们首先找到最大的元素,那么我们将按降序移动它。看看下面的图示。

在 Java 中不使用 sort() 方法对数组进行排序 - 选择排序

在上图中,运动是按降序排列的,我们首先找到最大的元素并将其放在最后。演示文稿显示阵列分为两个子阵列,如上所述。

public class Main {
  public static void main(String[] args) {
    int[] arr1 = new int[] {5, 4, 3, 8, 32, 768, 564, 95, 172, 1500, 859, 754};
    int small = -1; // at start there is no small  number....
    for (int i = 0; i < arr1.length; i++) {
      small = i;
      for (int j = i; j <= arr1.length - 1; j++) {
        if (arr1[j] < arr1[small]) {
          small = j;
        }
        // swap values
      }
      int temp = arr1[i];
      arr1[i] = arr1[small];
      arr1[small] = temp;
    }

    for (int i = 0; i < arr1.length; i++) {
      System.out.println(arr1[i]);
    }
  }
}

在上面的代码示例中,外循环的作用是传递数组。内部循环将最小元素与当前索引上的元素交换。

在 Java 中不使用 sort() 方法对数组进行排序 - 插入排序

插入排序是另一种简单的排序算法,我们可以使用它对数组进行排序。在这个算法中,给定的数组也被分成了两个子数组。但与选择排序不同的是,元素是从未排序的子数组中挑选出来的,并放置在正确的位置。看看下面的图片解释。

在 Java 中不使用 sort() 方法对数组进行排序 - 插入排序

如你所见,它不会在相邻元素之间进行交换。它只是找到最小的元素并将其放置在正确的位置。我们从第一个元素开始迭代并朝最后移动。将元素与其前任进行比较,然后与它旁边的元素进行比较,直到找到正确的位置。在提供的示例中,你可以看到 2 在放置在正确位置之前被比较了四次。这是代码示例。

public class Main {
  public static void main(String[] args) { // Insertion Sort....
    int[] arr2 = new int[] {5, 4, 3, 8, 32, 768, 564, 95, 172, 1500, 859, 754};
    int number = arr2.length;
    for (int a = 1; a < number; a++) {
      int keyValue = arr2[a];
      int b = a - 1;
      while (b >= 0 && arr2[b] > keyValue) {
        arr2[b + 1] = arr2[b];
        b = b - 1;
      }
      arr2[b + 1] = keyValue;
    }
    // printing inserion sort............................
    for (int i = 0; i < arr2.length; i++) {
      System.out.println(arr2[i]);
    }
  }
}

这是在 Java 中无需使用 sort 函数即可对数组进行排序的三种方法。