刷题刷出新高度,偷偷领先!偷偷领先!偷偷领先! 关注我们,悄悄成为最优秀的自己!

简答题

阅读以下说明和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<n;i++){    

          if(data[i]<data[i-1]){   //将data[i]插入有序子序列data[0]~data[i-1]

              tmp=data[i];             //备份待插入的元素

              data[i]=(1);

              for(j=i-2;j>=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<ep; bp++)                                    //按升序输出数组元素

             printf("%d\t",          (5)      );

        return 0;阅读以下说明和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<n;i++){    

          if(data[i]<data[i-1]){   //将data[i]插入有序子序列data[0]~data[i-1]

              tmp=data[i];             //备份待插入的元素

              data[i]=(1);

              for(j=i-2;j>=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<ep; bp++)                                    //按升序输出数组元素

             printf("%d\t",          (5)      );

        return 0;

}

使用微信搜索喵呜刷题,轻松应对考试!

答案:

(1)data[i-1]

(2)data[j+1]=data[j]

(3)data[j]

(4)arr

(5)*bp

解析:

直接插入排序是一种简单的排序算法,其核心思想是在插入第i个关键码时,将关键码ki依次与关键码ki-1,ki-2,…进行比较,找到ki应该插入的位置时停下来,然后将插入位置及其后的关键码依次向后移动,最后插入ki。

根据题目中的C代码和说明,我们可以进行如下解析:

(1)在插入第i个关键码时,需要将其与前面的关键码进行比较,因此需要将data[i]插入到有序子序列data[0]~data[i-1]中,此时需要填写data[i-1],即将待插入的元素与前面的元素进行比较。

(2)在查找插入位置时,需要将元素后移,因此需要将data[j+1](即当前位置的下一个位置)的值赋为data[j](当前位置的值),然后将当前位置的值后移。所以填写data[j+1]=data[j]。

(3)找到插入位置后,需要将待插入的元素插入到正确的位置,即将tmp的值赋给找到的位置,即data[j]。所以填写data[j]。

(4)在main函数中调用insertSort函数并输出数组元素时,需要将数组的首地址赋给指针变量bp,所以填写arr。此时bp指向数组的第一个元素。

(5)在输出数组元素时,需要输出指针bp所指向的元素的值,即bp。所以填写bp。

创作类型:
原创

本文链接:阅读以下说明和C代码,填写程序中的空(1)~(5),将解答写入答题纸的对应栏内。【说明】直接插入排序

版权声明:本站点所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明文章出处。

让学习像火箭一样快速,微信扫码,获取考试解析、体验刷题服务,开启你的学习加速器!

分享考题
share