1. 程式人生 > 實用技巧 >300. 最長上升子序列(動態規劃,二分查詢)

300. 最長上升子序列(動態規劃,二分查詢)

選擇排序(交換排序):

  選擇最小的,從前往後排,每一輪找出(除前面排好的)剩下元素中最小的值與當前值進行交換。

  由於找的是最小的數,如果有兩個相同的最小數,那麼靠後數就會被交換到前面,所以顯然選擇排序是不穩定的

  比較簡單,看了前面的氣泡排序,連結串列也沒必要了,直接上程式碼:

  

 public static void selectSort(int[] nums) {
         for (int i = 0; i < nums.length - 1; i++) {
             int min = nums[i];//定義最小值
             int
index = 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)    該演算法不穩定