Java 數據結構 - 排序

冒泡排序

思想:

  1. N 個元素需要排序 N-1 趟, 每趟比較相鄰的兩個元素,如果前一個元素和後一個元素不滿足大小順序規則,則交換位置,這樣一趟下來,一趟中的最大(最小)的元素就 “沉” 到最後面的位置。
  2. 執行 M 趟排序後,整個元素序列中的最後面的 M 個元素就排好順序了,剩下就只需要將前面的 N-M 個元素排好序即可。
private void sortBubble(int[] arr) {
        // 需要比較的趟數 N-1
        for (int i = 0; i < arr.length - 1; i++) {
           // 每趟中比較前面的 N-M 個相鄰的兩個元素,不滿足就交換位置,這樣最大或最小的就沉到最後面位置
            for (int j = 0; j < arr.length - 1 - i; j++) {
                if (arr[j + 1] < arr[j]) {
                    int temp = arr[j];
                    arr[j] = arr[j + 1];
                    arr[j + 1] = temp;
                }
            }
        }
    }

選擇排序

思想:

  1. N 個元素需要排序 N-1 趟,每趟中找到最大(小)值,放在待排序序列中的第一個位置,這樣一趟下來,最大值或最小值就放在最前面
  2. 執行 M 趟排序後,整個元素序列中的最前面的 M 個元素就排好順序了,剩下就只需要將後面的 N-M 個元素排好序即可
private void sortSelect(int[] arr) {
        // N 個元素需要排 N-1 趟,每趟中找出最大或最小值,
        for (int i = 0; i < arr.length - 1; i++) {
            // 將待排序序列中第一個元素先假定爲最大(小)值
            int min = i;
            for (int j = i; j < arr.length - i; j++) {
                // 如果一趟下來,有比第一個元素大或小元素,則將最小下標設定該下標
                if (arr[j] < arr[min]) {
                    min = j;   //重點在這,最小值下標將會被 次小值下標 替換
                }
            }
            // 交換位置
            if (min != i) {
                int temp = arr[min];
                arr[min] = arr[i];
                arr[i] = temp;
            }
        }
    }

插入排序

思想:

  1. 整個序列分爲:已經排好序的序列和待排序的序列,每趟從待排序序列中取出第一個元素,插入到已經排好序的序列合適的位置
  2. 將插入位置的後面元素依次往後移動位置。

    private void sortInsert(int[] arr) {
        for (int i = 1; i < arr.length; i++) {
            // 待排序序列的第一個元素
            int temp = arr[i];
            int j = i - 1;
            // 待排序元素插入到已排好序序列中的合適位置
            while (j > 0 && temp < arr[j]) {
                arr[j + 1] = arr[j];  // 依次往後移動一個位置
                j--;
            }
            arr[j + 1] = temp;
        }
    }
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章