2.2-1 n^3, 那個符號在windows live writer打不出來。。
2.2-2 首先給出這個算法的C代碼實現:
- void selection_sort(int *A, int n)
- {
- int i = 0;
- int j;
- int min_index;
- while(i < n)
- {
- min_index = i;
- j = i + 1;
- while(j < n)
- {
- if(A[min_index] > A[j])
- {
- min_index = j;
- }
- j++;
- }
- if(min_index != i)
- {
- A[min_index] = A[min_index] + A[i];
- A[i] = A[min_index] - A[i];
- A[min_index] = A[min_index] - A[i];
- }
- i++;
- }
- }
循環不變式大家可以參照課本給出,對於爲什麼只運行到前n-1個元素上運行是因爲算法每次都把第i小的元素放置到數組的正確位置,所以,當n-1的元素的位置都放置正確了,則最後的元素自動放置到了正確的位置。最佳運行時間和最壞運行時間都是 n^3,那個符號打不出來。。
2.2-3 對於查找不成功的情況,每次都要查找n個元素,對於查找成功的情況,平均是n/2。線性查找的平均情況和最壞情況都是(n),同樣那個漸進確界的符號打不出來。。
2.2-4 減少其基本操作運行次數