更多“B.插入排序:思路:当前a[1]..a[i-1]已排好序了,现要插入a[i]使a[1]..a[i]有序。procedure insert_sort;var i,j:integer;”相关问题
  • 第1题:

    四、排序算法

    A.快速排序:

    procedure qsort(l,r:integer);

    var i,j,mid:integer;


    正确答案:

     

    begin
    i:=l;j:=r; mid:=a[(l+r) div 2]; {将当前序列在中间位置的数定义为中间数}
    repeat
    while a[i]<mid do inc(i); {在左半部分寻找比中间数大的数}
    while a[j]>mid do dec(j);{在右半部分寻找比中间数小的数}
    if i<=j then begin {若找到一组与排序目标不一致的数对则交换它们}
    swap(a[i],a[j]);
    inc(i);dec(j); {继续找}
    end;
    until i>j;
    if l<j then qsort(l,j); {若未到两个数的边界,则递归搜索左右区间}
    if i<r then qsort(i,r);
    end;{sort}

  • 第2题:

    D. 冒泡排序

    procedure bubble_sort;

    var i,j,k:integer;


    正确答案:

     

    begin
    for i:=1 to n-1 do
    for j:=n downto i+1 do
    if a[j]<a[j-1] then swap( a[j],a[j-1]); {每次比较相邻元素的关系}
    end;

  • 第3题:

    高精度数的定义:

    type

    hp=array[1..maxlen] of integer;

    1.高精度加法

    procedure plus ( a,b:hp; var c:hp);

    var i,len:integer;


    正确答案:

     

    begin
    fillchar(c,sizeof(c),0);
    if a[0]>b[0] then len:=a[0] else len:=b[0];
    for i:=1 to len do begin
    inc(c[i],a[i]+b[i]);
    if c[i]>10 then begin dec(c[i],10); inc(c[i+1]); end; {进位}
    end;
    if c[len+1]>0 then inc(len);
    c[0]:=len;
    end;{plus}

  • 第4题:

    已知前序中序求后序

    procedure Solve(pre,mid:string);

    var i:integer;


    正确答案:

     

    begin
    if (pre='''') or (mid='''') then exit;
    i:=pos(pre[1],mid);
    solve(copy(pre,2,i),copy(mid,1,i-1));
    solve(copy(pre,i+1,length(pre)-i),copy(mid,i+1,length(mid)-i));
    post:=post+pre[1]; {加上根,递归结束后post即为后序遍历}
    end;

  • 第5题:

    单链表的插入操作

    procedure insert(L:linklist; I:integer; x:datatype);

    var p,q:pointer;


    正确答案:

     

    begin
    p:=loc(L,I);
    new(q);
    q^.data:=x;
    q^.next:=p^.next;
    p^.next:=q;
    inc(L.len);
    end;

  • 第6题:

    采用插入排序算法对n个整数排序,其基本思想是:在插入第i个整数时,前i-1个整数己经排好序,将第i个整数依次和第i-1, i-2, ...个整数进行比较,找到应该插入的位置。现采用插入排序算法对6个整数{5.2.4.6.1.3}进行从小到大排序,则需要进行(31)次整数之间的比较。对于该排序算法,输入数据具有(32)特点时,对整数进行从小到大排序,所需的比较次数最多。

    A.9

    B.10

    C.12

    D.13


    正确答案:C
    一般来说,插入排序都采用in-place在数组上实现。具体算法描述如下:(1)从第一个元素开始,该元素可以认为已经被排序(2)取出下一个元素,在已经排序的元素序列中从后向前扫描(3)如果该元素(已排序)大于新元素,将该元素移到下一位置(4)重复步骤3,直到找到已排序的元素小于或者等于新元素的位置(5)将新元素插入到下一位置中(6)重复步骤2~5对于本题:{5.2.4.6.1.3}第一趟:第一次比较,5大于2(新元素),元素5向后位移一位,而5之前无数据,即将2插入到1位,2,5第二趟:第一次比较,5大于4(新元素),元素5向后移一位,再进行第二次比较,2小于4(新元素),即将4插入2之后的一位,即2,4,5依次类推,,,所以比较的次数为1+2+1+4+4=12如果目标是把n个元素的序列升序排列,那么采用插入排序存在最好情况和最坏情况。最好情况就是,序列已经是升序排列了,在这种情况下,需要进行的比较操作需(n-1)次即可。最坏情况就是,序列是降序排列,那么此时需要进行的比较共有n(n-1)/2次。插入排序的赋值操作是比较操作的次数加上(n-1)次。平均来说插入排序算法的时间复杂度为O(n^2)。

  • 第7题:

    二维数组A[m,n]按行序为主序存放在内存,每个数组元素占1个存储单元,则元素aij的地址计算公式是( )。

    A.LOC(aij)=LOC(a00)+[(i-1)*m+(j-1)]

    B.LOC(aij)=LOC(a00)+[(j-1)*m+(i-1)]

    C.LOC(aij)=LOC(a00)+[(i-1)*n+(j-1)]

    D.LOC(aij)=LOC(a00)+[(j-1)*n+(i-1)]


    正确答案:C
    解析:按行为主序存放,aij距离a00共(i-1)*n+(j-1)个元素,共(i-1)*n+(j-1)个存储单元。设a00的地址为LOC(a00),则aij地址LOC(aij)LOC(aoo)+[(i-1)*n+(j-;)]。

  • 第8题:

    设数组a[1..n,1..m](n>1,m>1)中的元素以列为主序存放,每个元素占用1个存储单元,则数组元素a[i,j](1≤i≤n,1≤j≤m)相对于数组空间首地址的偏移量为( )。

    A.(i-1)*m+j-1
    B.(i-1)*n+j-1
    C.(j-1)*m+i-1
    D.(j-1)*n+i-1

    答案:D
    解析:
    本题考查程序语言基础知识。
    存储数组元素时,需要将元素按照某种顺序排列。对于二维及多维数组,则有按行存储和按列存储两种方式,其不同在于同一个元素相对于数组空间起始位置的偏移量不同。本问题中n行m列的二维数组a[1..n,1..m]是按列存储,则对于元素a[i,j]来说,它之前有完整的j-1列、每列n个元素,在第j列上排在a[i,j]之前的元素个数是i-1个,因此排列在a[i,j]之前的元素个数为(j-1)*n+i-1,由于每个元素占一个单元,该表达式的值就是偏移量。

  • 第9题:

    采用插入排序算法对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个整数{5,2,4,6,1,3}进行从小到大排序的过程如表所示。



    综上,元素间共比较12次。从上表中的第4步可看出,当待插入的元素比已排序部分的所有元素都要小时,需要比较和移动的元素最多,因此当输入数据序列正好从大到小排列,而需要将其从小到大排序时,元素间的比较次数最多。

  • 第10题:

    采用插入排序算法对n个整数排序,其基本思想是:在插入第i个整数时,前i-1个整数已经排好序,将第i个整数依次和第i-1,i-2,…个整数进行比较,找到应该插入的位置。现采用插入排序算法对6个整数{5,2,4,6,1,3}进行从小到大排序,则需要进行( )次整数之间的比较。对于该排序算法,输入数据具有(请作答此空)特点时,对整数进行从小到大排序,所需的比较次数最多。

    A.从小到大
    B.从大到小
    C.所有元素相同
    D.随机分布

    答案:B
    解析:
    采用插入排序算法对6个整数{5,2,4,6,1,3}进行从小到大排序的过程如表所示。



    综上,元素间共比较12次。从上表中的第4步可看出,当待插入的元素比已排序部分的所有元素都要小时,需要比较和移动的元素最多,因此当输入数据序列正好从大到小排列,而需要将其从小到大排序时,元素间的比较次数最多。

  • 第11题:

    完成下列折半插入排序算法。 Void binasort(struct node r[MAXSIZE],int n) {for(i=2;i<=n;i++){ r[0]=r[i];low=1;high=i-1; while(low<=high){ mid=(low+high)/2; if(r[0].key else low=mid+1 ; } for(j=i-1;j>=low;j- -)r[j+1]=r[j] ; r[low]=() ; } }


    正确答案:r[0]

  • 第12题:

    填空题
    完成下列折半插入排序算法。 Void binasort(struct node r[MAXSIZE],int n) {for(i=2;i else low=mid+1 ; } for(j=i-1;j>=low;j- -)r[j+1]=r[j] ; r[low]=() ; } }

    正确答案: r[0]
    解析: 暂无解析

  • 第13题:

    C.选择排序:

    procedure sort;

    var i,j,k:integer;


    正确答案:

     

    begin
    for i:=1 to n-1 do
    for j:=i+1 to n do
    if a[i]>a[j] then swap(a[i],a[j]);
    end;

  • 第14题:

    F. 归并排序

    {a为序列表,tmp为辅助数组}

    procedure merge(var a:listtype; p,q,r:integer);

    {将已排序好的子序列a[p..q]与a[q+1..r]合并为有序的tmp[p..r]}

    var I,j,t:integer;

    tmp:listtype;


    正确答案:

     

    begin
    t:=p;i:=p;j:=q+1;{t为tmp指针,I,j分别为左右子序列的指针}
    while (t<=r) do begin
    if (i<=q){左序列有剩余} and ((j>r) or (a[i]<=a[j])) {满足取左边序列当前元素的要求}
    then begin
    tmp[t]:=a[i]; inc(i);
    end
    else begin
    tmp[t]:=a[j];inc(j);
    end;
    inc(t);
    end;
    for i:=p to r do a[i]:=tmp[i];
    end;{merge}

    procedure merge_sort(var a:listtype; p,r: integer); {合并排序a[p..r]}
    var q:integer;
    begin
    if p<>r then begin
    q:=(p+r-1) div 2;
    merge_sort (a,p,q);
    merge_sort (a,q+1,r);
    merge (a,p,q,r);
    end;
    end;
    {main}
    begin
    merge_sort(a,1,n);
    end.

  • 第15题:

    高精度乘以高精度

    procedure high_multiply(a,b:hp; var c:hp}

    var i,j,len:integer;


    正确答案:

     

    begin
    fillchar(c,sizeof(c),0);
    for i:=1 to a[0] do
    for j:=1 to b[0] do begin
    inc(c[i+j-1],a[i]*b[j]);
    inc(c[i+j],c[i+j-1] div 10);
    c[i+j-1]:=c[i+j-1] mod 10;
    end;
    len:=a[0]+b[0]+1;
    while (len>1) and (c[len]=0) do dec(len);
    c[0]:=len;
    end;

  • 第16题:

    链表的定位函数

    loc(I:integer):pointer; {寻找链表中的第I个结点的指针}

    procedure loc(L:linklist; I:integer):pointer;

    var p:pointer;

    j:integer;


    正确答案:

     

    begin
    p:=L.head; j:=0;
    if (I>=1) and (I<=L.len) then
    while j<I do begin p:=p^.next; inc(j); end;
    loc:=p;
    end;

  • 第17题:

    设矩阵A是一个n*n对称矩阵.即A[i,j]=A[i,j],为了节省存储空间,将其下三角部分按行序为主序存放在一维数B[1...n(n+1)/2)中,对任一下三角元素aij(i>=j),在一维数组 B的下标位置k的值是( )。

    A.(i+(i-1))/2+j-1

    B.i(i-1)/2+j

    C.i(i+1)/2+-1

    D.i(i+1)/2+j


    正确答案:B
    解析:aij元素处在第i行第j列位置。上i-1行的元素个数为(1+i-1)(i-1)/2= j(i-1)/2。再加上在i行的i个元素,总共是i(i-1)/2+j

  • 第18题:

    设矩阵A是一个n×n对称矩阵.即A[i,j]=A[i,j],为了节省存储空间,将其下三角部分按行序为主序存放在一维数B[1...n(n+1)/2]中,对任一下三角元素aij(i≥j),在一维数组B的下标位置k的值是______。

    A.(i+(i-1))/2+j-1

    B.i(i-1)/2+j

    C.i(i+1)/2+j-1

    D.i(i+1)/2+j


    正确答案:B
    解析:aij元素处在第i行第j列位置。上i-1行的元素个数为(1+i-1)(i-1)/2=i(i-1)/2。再加上在i行的j个元素,总共是i(i-1)/2+j。

  • 第19题:

    下面程序段的功能是()。……int a[]={4,0,2,3,1},i,j,t;for(i=0;<5;i++){t=a[i];j=i;j--;while(j>=0

    下面程序段的功能是( )。 …… int a[]={4,0,2,3,1},i,j,t; for(i=0;<5;i++) { t=a[i];j=i;j--; while(j>=0&&t>a[j]) {a[j+1]=a[j];j--;} a[j+1] =t; } ……

    A.对数组a进行插入排序(升序)

    B.对数组a进行插入排序(降序)

    C.对数组a进行选择排序(升序)

    D.对数组a进行选择排序(降序)


    正确答案:B
    解析:本题考查数组的使用,注意插入排序方法。

  • 第20题:

    设数组a[1..n,1..m](n>1,m>1)中的元素以行为主序存放,每个元素占用1个存储单元,则数组元素a[i,j](1≤i≤n,i≤j≤m)相对于数组空间首地址的偏移量为( )。

    A.(i-1)*m+j-1
    B.(i-1)*n+j-1
    C.(j-1)*m+i-1
    D.(j-1)*n+i-1

    答案:A
    解析:
    数组 a[1..n,1..m] (n>1, m>1)如图所示:数组元素的存储地址=数组空间首地址+偏移量其中偏移量的计算方式为排列在所访问元素之前的元素个数乘以每个元素占用的存储单元数。对于元素a[i,j],在按行存储(以行为主序存放)方式下,该元素之前的元素个数为(i-1)*m+j-1。

  • 第21题:

    设数组a[1..n,1..m](n>l,m>l)中的元素以行为主序存放,每个元素占用1个存储单元,则数组元素a[i,j](1≤i≤n,i≤j≤m)相对于数组空间首地址的偏移量为(14)。

    A.(i-1)*m+j-1
    B.(i-1)*n+j-1
    C.(j-1)*m+i-1
    D.(j-1)*n+i-1

    答案:A
    解析:
    数组元素的存储地址=数组空间首地址+偏移量
    其中偏移量的计算方式为排列在所访问元素之前的元素个数乘以每个元素占用的存储单元数。
    对于元素a[i,j],在按行存储(以行为主序存放)方式下,该元素之前的元素个数为(i-1)*m+j-1。

  • 第22题:

    采用插入排序算法对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。

  • 第23题:

    执行下面的程序,窗体上第二行显示的内容是()。 Dim a(3,3)As Integer,i As Integer,j As Integer For i=1 To 3 For j=1 To 3 a(i,j)=(i-1)*2+j Print a(i,j); Nextj Print Next i

    • A、123
    • B、567
    • C、345
    • D、456

    正确答案:C