【JAVA】排序演算法之選擇排序
阿新 • • 發佈:2022-05-09
前言:
基礎排序演算法,旨在簡單易懂講解演算法邏輯和思路,以下均使用升序方式來講解和實現演算法。
思路:
選擇排序重在選擇二字,比如給定一串數字 5 3 4 1 2,我們選定第一位存放最小的數字,因此需要找出數字5後面所有數字 3 4 1 2中最小的數字與其交換,以此類推再完成第二個第三個直到最後一位。
程式碼:
public static int[] selectAsc(int[] nums) { int length = nums.length; for (int i = 0; i < length; i++) { int min = i;for (int j = i+1; j < length; j++) { if(nums[min] > nums[j]){ min = j; } } swap(i,min,nums); } return nums; } public static void swap(int src, int target, int[] nums){ int val = nums[src]; nums[src] = nums[target]; nums[target]= val; }
分析:
選擇排序的每一次選中最小值都需要經過N-m次迴圈,N為陣列的總長度,m為當前排序的位置。
交換使用一個臨時變數儲存交換位置。
最好情況:(N-1)+(N-2)+ ... + 2 + 1 = N(N-1)/2 次
最壞情況:(N-1)+(N-2)+ ... + 2 + 1 = N(N-1)/2 次
時間複雜度:O(n²)
空間複雜度:O(1)