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 减少其基本操作运行次数