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 函式即可對陣列進行排序的三種方法。