itgle.com
参考答案和解析
参考答案:本题属于排序问题,只是排出正负,不排出大小。可在数组首尾设两个指针i和j,i自小至大搜索到负数停止,j自大至小搜索到正数停止。然后i和j所指数据交换,继续以上过程,直到 i=j为止。
  [算法描述]
  void Arrange(int A[],int n)
  //n个整数存于数组A中,本算法将数组中所有正数排在所有负数的前面
  {int i=0,j=n-1,x; //用类C编写,数组下标从0开始
  while(i  {while(i0) i++;
  while(i  if(i  }// while(i  }//算法Arrange结束.
  [算法讨论]对数组中元素各比较一次,比较次数为n。最佳情况(已排好,正数在前,负数在后)不发生交换,最差情况(负数均在正数前面)发生n/2次交换。用类c编写,数组界偶是0..n-1。空间复杂度为O(1).
更多“设任意n个整数存放于数组A(1:n)中,试编写算法,将所有正数排在所有负数前面(要求算法复杂度为0(n))。 ”相关问题
  • 第1题:

    设{an}为数列,对于“存在正数肘,对任意正整数n,有
    的否定(即数列{an}无界)是( )。

    A、存在正数M,存在正整数n,使得|an|>M
    B、对任意正数M,存在正整数n,使得|an|>M
    C、存在正数M,对任意正整数n,有|an|>M
    D、对任意正数M以及任意正整数n,有|an|>M

    答案:B
    解析:
    对任意正数M,存在正整数n,使得

    则称数列{an}无界.

  • 第2题:

    设M是一个n行n列的0-1矩阵,每行的1都排在0的前面。 (1)设计一个最坏情况下O(nlogn)时间的算法找到M中含有1最多的行,说明算法的设计思想,估计最坏情况下的时间复杂度。 (2)对上述问题,能否找到一个最坏情况下O(n)时间的算法?


    AB

  • 第3题:

    在数组A[0,1,……,n-1]中查找给定值K的算法大致如下: i=n-1; While(i>=0&&(A[i]!=k)) i--; return i; 该算法的时间复杂度为 () A O(n) B 无法确定 C O(n-i) D O(n-i+1)


    O(n)

  • 第4题:

    设A是由n个非0实数构成的数组,设计一个算法重新排列的数组的数,使得负数都排列在正数的前面,要求算法使用O(n)的时间和O(1)的空间。


    a , b , c 是三个非零向量成立,当 a , b , c 三个向量共面时,则 { a , b , c } 不为空间的一组基, 即命题p推不出命题q; 但反之 { a , b , c } 为空间的一组基,则 a , b , c 不共面,所以 a , b , c 是三个非零向量, 即命题q推出命题p; 所以命题q是命题p的充分不必要条件. 故选A.

  • 第5题:

    设任意n个整数存放于数组A(1:n)中,试编写算法,将所有正数排在所有负数前面(要求算法复杂度为0(n))。 [题目分析]本题属于排序问题,只是排出正负,不排出大小。可在数组首尾设两个指针i和j,i自小至大搜索到负数停止,j自大至小搜索到正数停止。然后i和j所指数据交换,继续以上过程,直到 i=j为止。


    [算法描述]void Arrange(int A[],int n) //n个整数存于数组A中,本算法将数组中所有正数排在所有负数的前面{int i=0,j=n-1,x; //用类C编写,数组下标从0开始while(i{while(i0) i++;while(i if(i交换A[i] 与A[j]}// while(i}//算法Arrange结束.[算法讨论]对数组中元素各比较一次,比较次数为n。最佳情况(已排好,正数在前,负数在后)不发生交换,最差情况(负数均在正数前面)发生n/2次交换。用类c编写,数组界偶是0..n-1。空间复杂度为O(1).