首页 > 试题广场 >

若有以下程序段,则该程序段的功能是?

[单选题]
若有以下程序段:
int a[] = {4, 0, 2, 3, 1}, i, j, t;
for(i = 1;i < 5;i++) {
    t = a[i];
    j = i - 1;
    while(j >= 0 && t > a[j]){
        a[j + 1] = a[j];
        --j;
    }
    a[j + 1] = t;
}

则该程序段的功能是:

  • 对数组a进行插入排序(升序)
  • 对数组a进行插入排序(降序)
  • 对数组a进行选择排序(升序)
  • 对数组a进行选择排序(降序)
答案 B

  插入排序的原理:始终定义第一个元素为有序的,将元素逐个插入到有序排列之中,其特点是要不断的移动数据,空出一个适当的位置,把待插入的元素放到里面去

  选择排序的原理:每次在无序队列中“选择”出最小值,放到有序队列的最后,并从无序队列中去除该值(具体实现略有区别)。代码如下:
编辑于 2021-11-17 15:33:15 回复(5)
答:B,在第i次排序中,前i-1个元素始终是有序的,此时只需把第i个元素插入到有序的序列中即可,故代码中体现的是插入排序的思想。代码中对当前a[i]>a[j](0<=k<i-1)是否成立进行判断,若成立则将a[j]往后移(即大的数排在前面,小的数排在后面),故代码中的排序原则为降序排。
       结合所述答案为插入排序(降序),故选B。
发表于 2015-10-26 11:14:35 回复(1)
插入排序:每次往选择当前元素,插入到前面已经排好序的序列中。
选择排序:每次在后面未排序好的序列中选择一个最小(或最大)的元素放到本来无序的序列的第一个元素中
发表于 2017-07-05 21:45:29 回复(0)
插入排序:
printline("before sort:", v);
        for (int i=1; i<v.size(); i++){
                int key = v[i];
                int j = i-1;
                while (j >= 0 && v[j] > key){
                        v[j+1] = v[j];
                        j--;
                }
                v[j+1] = key;

        }
        printline("after sort:", v);
选择排序:
for(int i=0; i<v.size(); i++){
                int min = v[i]; 
                int temp;
                int index = i;
                for(int j=i+1;j<v.size();j++){
                    if(v[j] < min){ 
                        min = v[j]; 
                        index = j;
                    }       
                }       
        
                temp = v[i]; 
                v[i] = min;
                v[index]= temp;
        } 
编辑于 2016-09-01 14:37:30 回复(0)
a[i]>a[i-1]  后一个大于前一个时变换,则为降序
发表于 2016-08-22 14:26:16 回复(0)
插入排序就是按顺序每次拿一个元素,跟之前所有的元素比较,大小在某两个元素中间就在此插入,具体就是元素后移再插入
发表于 2022-04-15 08:52:50 回复(0)
在第i次排序中,前i-1个元素始终是有序的,此时只需把第i个元素插入到有序的序列中即可,故代码中体现的是插入排序的思想
发表于 2019-11-19 18:25:13 回复(0)
直接插入排序
发表于 2017-04-19 22:56:19 回复(0)
注意选择排序与插入排序的区别,选择排序是选择最小的或者最大的,放到队列的最后,而选择排序是选择一个元素放在已排序好的队列的后面。

发表于 2016-04-26 21:58:53 回复(1)
这程序写法真垃圾,while那部分 i 和 j 区分不出来,看着迷糊了都
发表于 2020-03-18 16:25:22 回复(0)
B
从序列第二个数开始选择,依次将每一个数插入到前面已有序的序列当中,则为插入排序。
又因为在第一个大于当前数的位置停止循环比较,所以是降序。
发表于 2019-05-04 16:37:46 回复(0)
循环里的 a[j+1]=a[j];   --j;就已经证明了是插排,因为元素往后移了,就是要挪出适合的位置给需要插入的排序的
发表于 2017-08-30 17:48:20 回复(0)
题目的意思应该是答案B,不过题目中的代码有一个错误之处,就是while循环里面是j--,而不是j++
发表于 2015-08-22 11:03:24 回复(4)
选择排序
①、基本思想:简单直观。它的工作原理:首先在未排序序列中找到最小(大)元素,存放到排序序列的起始位置,然后,再从剩余未排序元素中继续寻找最小(大)元素,然后放到已排序序列的末尾。以此类推,直到所有元素均排序完毕。 
②、算法描述:n个记录的直接选择排序可经过n-1趟直接选择排序得到有序结果。
初始状态:无序区为R[1..n],有序区为空;
第i趟排序(i=1,2,3…n-1)开始时,当前有序区和无序区分别为R[1..i-1]和R(i..n)。该趟排序从当前无序区中-选出关键字最小的记录 R[k],将它与无序区的第1个记录R交换,使R[1..i]和R[i+1..n)分别变为记录个数增加1个的新有序区和记录个数减少1个的新无序区;
n-1趟结束,数组有序化了。

插入排序
①、基本思想:在要排序的一组数中,假定前n-1个数已经排好序,现在将第n个数插到前面的有序数列中,使得这n个数也是排好顺序的。如此反复循环,直到全部排好顺序。
②、算法描述:
1. 从第一个元素开始,该元素可以认为已经被排序;
2. 取出下一个元素,在已经排序的元素序列中从后向前扫描;
3. 如果该元素(已排序)大于新元素,将该元素移到下一位置;
4. 重复步骤3,直到找到已排序的元素小于或者等于新元素的位置;
5. 将新元素插入到该位置后;
6. 重复步骤2~5。

发表于 2022-09-22 13:56:18 回复(0)
插入排序的原理:始终定义第一个元素为有序的,将元素逐个插入到有序排列之中,其特点是要不断的移动数据,空出一个适当的位置,把待插入的元素放到里面去 选择排序的原理:每次在无序队列中“选择”出最小值,放到有序队列的最后,并从无序队列中去除该值。
发表于 2021-10-28 10:46:49 回复(0)
需要学习排序算法
发表于 2019-04-14 10:27:58 回复(0)
这程序也是666,写的真难看。
发表于 2018-02-04 21:53:06 回复(0)
这段代码实现了插入排序(Insertion Sort)算法,用于对一个整数数组进行排序。 首先,定义了一个整数数组 a[],并初始化为 {4, 0, 2, 3, 1}。然后,使用一个循环遍历数组,从第二个元素开始(i = 1),依次对每个元素进行排序。 在每次循环中,首先将当前元素的值赋给变量 t。然后,将当前元素的索引 i 减去 1,得到前一个元素的索引 j。 接下来,使用一个 while 循环,将当前元素 t 与前面的元素进行比较,如果当前元素小于前面的元素,就将前面的元素向后移动一位,直到找到合适的位置。这个过程就是插入排序的核心思想。 最后,将当前元素 t 插入到正确的位置上,即 a[j + 1]。 最终,这段代码会将数组 a[] 排序为 {0, 1, 2, 3, 4}。
编辑于 2023-12-07 20:05:23 回复(0)
我计算的过程如下:
第一次 i=1时,t=a[i]=a[1]  ,j=i-1=1-1=0,这时候t是a[1]<a[0],直接运行最下面a[j+1]=t,即a[1]=t,这时候t=0
第二次 i=2时,t=a[i]=a[2]  ,j=i-1=2-1=1,这时候t是a[2]<a[1],while语句运行,a[j+1]=a[j]  即a[2]=a[1],然后- -j,这时候j=1-1=0,然后下面a[j+1]=t,即a[1]=t,这时候a[2]=a[1],t=a[2]=2
以此类推
第三次 i=3时,t=a[3]=3
第四次 i=4时,t=a[4]=1
请问各位大佬我哪里出错了,想不明白。
发表于 2022-08-25 04:59:00 回复(0)
插入排序:选取当前元素,插入到前面应该排好序的序列中。选择排序:每次在后面未排序好的序列中选择最大或最小的元素放到序列中。
发表于 2022-02-10 10:18:55 回复(0)