二叉樹面試題
選擇排序是在遍歷一個待排序的數組過程中,
第一次從 arr[0] 到 arr[n-1] 中選取最小值,與 arr[0] 交換;
第二次從arr[1] 到 arr[n-1]中選取最小值, 與arr[1]交換;
第三次從arr[2] 到 arr[n-1]中選取最小值,與arr[2]交換;
……
第 i 次從 arr[i-1] 到 arr [n-1] 中選取最小值,與arr[i-1]交換;
第n-1次從 arr[n-2] 到 arr [n-1] 中選取最小值,與 arr[n-2] 交換,總共通過n-1次,得到一個按排序碼從小到大排列的有序序列。
具體實現參考如下源代碼:
public static void choice(int arr[]) {
for (int i = 0; i < arr.length - 1; i++) {
int minIndex = i;
int min = arr[i];
for (int j = i + 1; j < arr.length; j++) {
if (min > arr[j]) {
min = arr[j];
minIndex = j;
}
}
if (minIndex != i) {
arr[minIndex] = arr[i];
arr[i] = min;
}
}
}
A. 11,1,2,12,35,18,30,15
B. 1,2,12,18,15,35,30,11
C. 1,2,11,12,15,18,30,35
D. 1,2,11,12,15,18,35,30
答案:B
解析:第一趟選擇1,將1和12交換位置,序列變為1,15,12,18,2,35,30,11,第二趟選擇2,將2和15交換位置,序列變為1,2,12,18,15,35,30,11;故B正確
A. 數據已按升序排列
B. 數據已按升降序排列
C. 倆者花費時間一樣
答案:C
解析:不管升序還是降序 其比較次數都是整條路徑。