单选题 当所有n个待排序记录的排序码(Key)都相等,直接插入排序、堆排序、冒泡排序、简单选择的排序码比较次数和数据移动次数分别为______、______、______和______。
【正确答案】 A
【答案解析】
【正确答案】 D
【答案解析】
【正确答案】 A
【答案解析】
【正确答案】 C
【答案解析】[解析] 所有待排序的数据记录的排序码都相等,可按照数据初始排列已经有序的情况来分析。按照本书所给算法:对于直接插入排序,它的排序码比较次数和数据移动次数受数据的初始排列影响,每趟只比较1次,做n-1趟,排序码比较次数总共为n-1,数据移动次数为0。对于冒泡排序,它的排序码比较次数和数据移动次数也受数据的初始排列影响,只比较一趟,排序码比较次数n-1,数据移动次数0。对于简单选择排序,它的排序码比较次数不受数据的初始排列影响,比较n-1趟,排序码比较次数为n(n-1)/2;但数据移动次数受数据的初始排列影响,为0。堆排序情况比较复杂,在siftDown算法中,每个结点最多比较2次(横向1次、纵向1次),移动2次(搬到工作单元又搬回来),所以在形成初始堆时,总共次排序码比较,次数据移动;在堆排序时,做n-1次对调和重新形成堆,每次对调做3次数据移动,最多做(n-1)×2次排序码比较,(n-1)×(3+2)次数据移动。综合以上,堆排序的排序码比较次数最多,数据移动次数最多为