对n个关键码构成的序列采用直接插入排序法进行升序排序的过程是:在插入第i个关键码Ki时,其前面的i-1个关键码己排好序,因此令Ki与Ki-1、Ki-2、...,依次比较,多到K1为止,找到插入位置并移动相关元素后将Ki插入有序子序列的适当位置,完成本趟(即第i-1趟)排序。以下关于直接插入排序的叙述中,正确的是()。A.若原关键码序列已经升序排序,则排序过程中关键码间的比较次数最少B.若原关键码序列已经降序排序,则排序过程中关键码间的比较次数最少C.第1趟完成后即可确定整个序列的最小关键码D.第1趟完成后

题目

对n个关键码构成的序列采用直接插入排序法进行升序排序的过程是:在插入第i个关键码Ki时,其前面的i-1个关键码己排好序,因此令Ki与Ki-1、Ki-2、...,依次比较,多到K1为止,找到插入位置并移动相关元素后将Ki插入有序子序列的适当位置,完成本趟(即第i-1趟)排序。以下关于直接插入排序的叙述中,正确的是()。

A.若原关键码序列已经升序排序,则排序过程中关键码间的比较次数最少

B.若原关键码序列已经降序排序,则排序过程中关键码间的比较次数最少

C.第1趟完成后即可确定整个序列的最小关键码

D.第1趟完成后即可确定整个序列的最大关键码


相似考题
更多“对n个关键码构成的序列采用直接插入排序法进行升序排序的过程是:在插入第i个关键码Ki时,其前面的 ”相关问题
  • 第1题:

    对一个由n关键码组成的序列,借助排序过程选出其中最大的关键码,要求关键码比较次数和移动次数最少,应当使用下列哪种排序方法?

    A.归并排序

    B.直接插入排序

    C.直接选择排序.

    D.快速排序


    正确答案:C
    解析:直接选择排序第一趟扫描就可以把最大的关键码找出来(不必等到排序结束)其他几种排序方法都必须等到排序完成才能找到最大关键码。

  • 第2题:

    对n个关键码构成的序列采用直接插入排序法进行升序排序的过程是:在插入第i个关键码Ki时,其前面的i-1个关键码己排好序,因此令Ki与Ki-1、Ki-2、...,依次比较,最多到K1为止,找到插入位置并移动相关元素后将Ki插入有序子序 列的适当位置,完成本趟(即第i-1趟)排序。以下关于直接插入排序的叙述中,正确的是( )。

    A. 若原关键码序列已经升序排序,则排序过程中关键码间的比较次数最少
    B.若原关键码序列已经降序排序,则排序过程中关键码间的比较次数最少
    C.第1趟完成后即可确定整个序列的最小关键码
    D.第1趟完成后即可确定整个序列的最大关键码

    答案:A
    解析:

  • 第3题:

    已知初始待排序关键码{5, 8, 1, 3, 9, 6, 2, 7},回答下列问题: (1)采用直接插入排序算法,写出6插入后的排序结果 (2)用Shell插入排序法进行排序,当采用的步长(增量)是3,通过这一趟排序后所形成的序列结果。 (3)写出采用冒泡法排升序的前三趟结果 (4)以第一元素为枢轴(支点)进行快速排升序,请给出第一趟排序(一次分割)后的结果。 (5)写出采用简单选择法排升序的前三趟的结果 (6)采用堆排序方法排升序,给出初始堆的序列结果


    直接选择排序

  • 第4题:

    阅读以下说明和C代码,填写程序中的空(1)~(5),将解答写入答题纸的对应栏内。【说明】直接插入排序是一种简单的排序方法,具体做法是:在插入第i个关键码时,k1,k2,…,ki-1已经排好序,这时将关键码ki依次与关键码ki-1,ki-2,…,进行比较,找到ki应该插入的位置时停下来,将插入位置及其后的关键码依次向后移动,然后插入ki。例如,对{17,392,68,36}按升序作直接插入排序时,过程如下:第1次:将392(i=1)插入有序子序列{17},得到{17,392};第2次:将68(i=2)插入有序子序列{17,392},得到{17,68,392};第3次:将36(i=3)插入有序子序列{17,68,392},得到{17,36,68,392},完成排序。下面函数 insertSort用直接插入排序对整数序列进行升序排列,在main函数中调用insertSort并输出排序结果。 【C代码】void insert Sort(int data[],int n)/*用直接插入排序法将data[0]~ data[n-1]中的n个整数进行升序排列*/{ int i,j; int tmp; for(i=1; i=0 && data[j] > tmp;j----) //查找插入位置并将元素后移 (2); (3) =tmp; //插入正确位置 }/*if*/ }/*for*/}/*insertSort*/ int main(){ int *bp,*ep; int n,arr[]={17,392,68,36,291,776,843,255}; n = sizeof(arr) / sizeof(int); insertSort(arr,n); bp= (4) ; ep = arr+n; for( ;bp=0 && data[j] > tmp;j----) //查找插入位置并将元素后移 (2); (3) =tmp; //插入正确位置 }/*if*/ }/*for*/}/*insertSort*/ int main(){ int *bp,*ep; int n,arr[]={17,392,68,36,291,776,843,255}; n = sizeof(arr) / sizeof(int); insertSort(arr,n); bp= (4) ; ep = arr+n; for( ;bp

    答案:
    解析:
    (1)data[i-1](2)data[j+1]=data[j](3)data[j+1](4)arr(5)*bp
    【解析】

    直接插入排序法是将关键码插入已经排好的序列中,因此将data[i]插入序列data[0]~data[i-1]中,此时序列data[0]~data[i-1]已经按照升序排列好,而data[i]应插入位置前的数据应该比data[i]小,而插入位置后的数据应比data[i]大,在if语句中判断data[i]=data[i-1],则将data[i]插入到d[i-1]后;若data[i]=0&&data[j]>tmp;j--)循环,从data[i-2]开始向前逐一比较,即j从i-2开始向0循环,若data[j]>tmp,则进行for循环,此时需要将data[j]即data[i-2]的值后移,使得data[i-1]=data[i-2],即data[j+1]=data[j],然后j--,用tmp与data[j]进行比较,如果tmp< data[j],则说明tmp应放在data[j]之前,那么data[j]需要继续往后移动。所以data[j+1]= data[j]。 当该循环结束时,此时有2种情况:(1)j=-1<0,此时data[0]>tmp;应使得data[0]后移,即data[1]=data[0],data[0]=tmp,因此第3空填写data[j+1];(2)data[j]<=tmp;此时需要将tmp插入到data[j]后,即data[j+1]=tmp。 在main函数中调用insertSort函数并输出数组元素,在for(; bp

  • 第5题:

    采用插入排序算法对n个整数排序,其基本思想是:在插入第i个整数时,前i-1个整数己经排好序,将第i个整数依次和第i-1,i-2,...个整数进行比较,找到应该插入的位置。现采用插入排序算法对6个整数{5,2,4,6,1,3}进行从小到大排序,则需要进行( )次整数之间的比较。

    A.9
    B.10
    C.12
    D.13

    答案:C
    解析:
    这种排序法思想很简单,例如这6个数,先用2和之前的数比较一次,得出序列{2,5},然后再用4和5,2分别比较一次,得出序列{2,4,5},当6插入时只需要和5比一次即可,得到新序列{2,4,5,6},以此类推,最终共比较12次,得到从小到大的最终序列{1,2,3,4,5,6},故正确答案为C。