单选题 当所有n个待排序记录的排序码都相等时,直接插入排序、堆排序、起泡排序、简单选择排序的排序码比较次数和元素移动次数分别为(①)、O(n)和O(n)、n-1和0、n(n-1)/2和0。
  • A.n-1和0
  • B.n(n-1)/2和n
  • C.n(n-1)/2和0
  • D.O(n)和O(n)
【正确答案】 A
【答案解析】[解析] 所有待排序的数据记录的排序码都相等,可按照数据初始排列已经有序的情况来分析。按照本教材所给算法: 直接插入排序的排序码比较次数和元素移动次数受数据的初始排列影响,每趟只比较1次,做n-1趟,排序码比较次数总共为n-l,元素移动次数为0。 起泡排序的排序码比较次数和元素移动次数也受数据的初始排列影响,只比较一趟,排序码比较次数为n-1,元素移动次数为0。 简单选择排序的排序码比较次数不受数据的初始排列影响,比较n-1趟,排序码比较次数为n(n-1)/2;但元素移动次数受数据的初始排列影响,当待排序记录排序码都相等时,元素移动次数为0。 对于堆排序,在形成初始堆时,总共有[*]次排序码比较,[*]次数据移动;在堆排序时,做n-1次对调和重新形成堆,每次对调做3次数据移动,最多做(n-1)×2次排序码比较,(n-1)×(3+2)次数据移动。综上所述,堆排序的排序码比较次数最多为[*],元素移动次数最多是[*]。