300. 最長上升子序列(動態規劃,二分查詢)
阿新 • • 發佈:2020-07-08
選擇排序(交換排序):
選擇最小的,從前往後排,每一輪找出(除前面排好的)剩下元素中最小的值與當前值進行交換。
由於找的是最小的數,如果有兩個相同的最小數,那麼靠後數就會被交換到前面,所以顯然選擇排序是不穩定的
比較簡單,看了前面的氣泡排序,連結串列也沒必要了,直接上程式碼:
public static void selectSort(int[] nums) { for (int i = 0; i < nums.length - 1; i++) { int min = nums[i];//定義最小值 intindex = i;//記錄最小值的索引位置 //下面就是尋找i+1到length中最小的值 for (int j = i + 1; j < nums.length; j++) { if (nums[j] < min) {//尋找最小的數 min = nums[j]; index = j;//最小值的索引 } } if (index != i) {//如果當前值不是最小值,那麼就將它與最小值交換nums[index] = nums[i]; nums[i] = min; } } }
測試:
8萬隨機數(0—1000萬)排序時間:
after-before=4700ms
時間複雜度為:均為O(n2) 空間複雜度:O(1) 該演算法不穩定