如何快速的學會簡單排序算法

算法 計算複雜性理論 Java 馬士兵說吧 2019-04-29
點擊文章末尾瞭解更多,即可獲得馬士兵老師講解的簡單排序算法

目錄

要點

簡單排序處理流程

算法分析

簡單選擇排序算法的性能

時間複雜度

空間複雜度

完整參考代碼

JAVA版本

參考資料

相關閱讀

要點

簡單選擇排序是一種選擇排序

選擇排序:每趟從待排序的記錄中選出關鍵字最小的記錄,順序放在已排序的記錄序列末尾,直到全部排序結束為止。

簡單排序處理流程

(1)從待排序序列中,找到關鍵字最小的元素;

(2)如果最小元素不是待排序序列的第一個元素,將其和第一個元素互換;

(3)從餘下的 N - 1 個元素中,找出關鍵字最小的元素,重複(1)、(2)步,直到排序結束。


如何快速的學會簡單排序算法


如圖所示,每趟排序中,將當前第 i 小的元素放在位置 i 上。

核心代碼

public void selectionSort(int[] list) {
// 需要遍歷獲得最小值的次數
// 要注意一點,當要排序 N 個數,已經經過 N-1 次遍歷後,已經是有序數列
for (int i = 0; i < list.length - 1; i++) {
int temp = 0;
int index = i; // 用來保存最小值得索引

// 尋找第i個小的數值
for (int j = i + 1; j < list.length; j++) {
if (list[index] > list[j]) {
index = j;
}
}

// 將找到的第i個小的數值放在第i個位置上
temp = list[index];
list[index] = list[i];
list[i] = temp;

System.out.format("第 %d 趟:\t", i + 1);
printAll(list);
}
}

算法分析

簡單選擇排序算法的性能

如何快速的學會簡單排序算法

時間複雜度

簡單選擇排序的比較次數與序列的初始排序無關。 假設待排序的序列有 N 個元素,則比較次數總是N (N - 1) / 2

而移動次數與序列的初始排序有關。當序列正序時,移動次數最少,為 0.

當序列反序時,移動次數最多,為3N (N - 1) / 2。

所以,綜合以上,簡單排序的時間複雜度為 O(N2)

空間複雜度

簡單選擇排序需要佔用 1 個臨時空間,在交換數值時使用。

完整參考代碼

JAVA版本

代碼實現

View Code

運行結果

排序前: 3 5 2 8 1 2 0 8 4 1

第 1 趟: 0 5 2 8 1 2 3 8 4 1

第 2 趟: 0 1 2 8 5 2 3 8 4 1

第 3 趟: 0 1 1 8 5 2 3 8 4 2

第 4 趟: 0 1 1 2 5 8 3 8 4 2

第 5 趟: 0 1 1 2 2 8 3 8 4 5

第 6 趟: 0 1 1 2 2 3 8 8 4 5

第 7 趟: 0 1 1 2 2 3 4 8 8 5

第 8 趟: 0 1 1 2 2 3 4 5 8 8

第 9 趟: 0 1 1 2 2 3 4 5 8 8

排序後: 0 1 1 2 2 3 4 5 8 8

原文:https://www.cnblogs.com/jingmoxukong/p/4303289.html

如何快速的學會簡單排序算法

相關推薦

推薦中...