深刻理解選擇排序
選擇排序法基本思想:第1趟,在待排序記錄r[1]~r[n]中選出最小的記錄,將它與r[1]交換;第2趟,在待排序記錄r[2]~r[n]中選出最小的記錄,將它與r[2]交換;以此類推,第i趟在待排序記錄r[i]~r[n]中選出最小的記錄,將它與r[i]交換,使有序序列不斷增長直到全部排序完畢
給定一組資料int nums =用選擇排序的思維,進行如圖分析
根據上面所述進行**實現:
//外層for迴圈執行一次,有乙個數回歸正確位置,所以只需比較length-1次
for (int i = 0; i < nums.length - 1; i++)
}//通過m與i值的比較,做出是否進行交換的選擇
if (m != i)
}
現在來反觀程式:外層for迴圈內部有三個基本操作:1.將當前數的位置賦值給中間變數。2.確定本次選擇中最小數的位置3.通過最小數字置的和當前數的位置的比較,進行數的交換。這三個步驟執行n-1次,然後排序完成。
現在來看,是不是思路很清晰,但是當我們開始遇見這個問題時,看了它的基本思想後,我們能從中抽取出這樣清晰的基本思路嗎?然後設計出程式嗎?
每乙個程式,既有差異,又有共性,將他們的思想抽象成程式的步驟,這是我們需要鍛鍊的一種能力。
爬樓梯 從簡單的動態規劃入手
leetcode 70 爬樓梯 題目概述 假設你正在爬樓梯。需要 n 階你才能到達樓頂。每次你可以爬 1 或 2 個台階。你有多少種不同的方法可以爬到樓頂呢?注意 給定 n 是乙個正整數。示例 1 輸入 2 輸出 2 解釋 有兩種方法可以爬到樓頂。1.1 階 1 階 2.2 階 示例 2 輸入 3 ...
選擇排序 最簡單的排序
最容易想到的排序,給你一串數字,如何按照從小到大排序。我們可以從數字中找出最小的數,把它從舊的資料中剔除,放在新陣列的第一位,然後從餘下的數字中再找出最小的,放到第二位,這樣一直找,直到原陣列還剩下一位的時候,把這一位直接放到新陣列的最後一位。我們也可以不新建陣列,沒有必要浪費這一倍的空間,在找到最...
簡單的排序,氣泡排序和選擇排序
氣泡排序 每次比較相鄰的兩個數,如果前面的比後面的大,則交換這兩個數 這裡假定按照從小到大排序 以此進行,一共需要比較n 1次,這樣每次就能把最大的數放到最後面,如下圖 的關鍵點是需要有兩個巢狀迴圈,外層迴圈控制的是排序的次數,內層迴圈控制的是每次排序時數的比較 void bubblesort in...