更多“写出两个排序算法,问哪个好?(威盛)”相关问题
  • 第1题:

    有n个记录存储在带头结点的双向链表中,现用双向冒泡排序法对其按上升序进行排序,请写出这种排序的算法。(注:双向冒泡排序即相邻两趟排序向相反方向冒泡)。


    参考答案:
      [算法描述]:
      typedef struct node
      { ElemType data;
      struct node *prior,*next;
      }node,*DLinkedList;
      void TwoWayBubbleSort(DLinkedList la)
      //对存储在带头结点的双向链表la中的元素进行双向起泡排序。
      {int exchange=1; // 设标记
      DLinkedList p,temp,tail;
      head=la //双向链表头,算法过程中是向下起泡的开始结点
      tail=null; //双向链表尾,算法过程中是向上起泡的开始结点
      while (exchange)
      {p=head->next; //p是工作指针,指向当前结点
      exchange=0; //假定本趟无交换
      while (p->next!=tail) // 向下(右)起泡,一趟有一最大元素沉底
      if (p->data>p->next->data) //交换两结点指针,涉及6条链
      {temp=p->next; exchange=1;//有交换
      p->next=temp->next;temp->next->prior=p //先将结点从链表上摘下
      temp->next=p; p->prior->next=temp; //将temp插到p结点前
      temp->prior=p->prior; p->prior=temp;
      }
      else p=p->next; //无交换,指针后移
      tail=p; //准备向上起泡
      p=tail->prior;
      while (exchange && p->prior!=head)
      //向上(左)起泡,一趟有一最小元素冒出
      if (p->dataprior->data) //交换两结点指针,涉及6条链
      {temp=p->prior; exchange=1; //有交换
      p->prior=temp->prior;temp->prior->next=p;
      //先将temp结点从链表上摘下
      temp->prior=p; p->next->prior=temp; //将temp插到p结点后(右)
      temp->next=p->next; p->next=temp;
      }
      else p=p->prior; //无交换,指针前移
      head=p; //准备向下起泡
      }// while (exchange)
      } //算法结束

  • 第2题:

    写出asic前期设计的流程和相应的工具。(威盛)


    正确答案:
               

  • 第3题:

    若排序前后关键字相同的两个元素相对位置不变,则称该排序方法是稳定的。下列排序算法中,有(14)种排序算法是稳定的:归并排序、快速排序、希尔排序、堆排序、基数排序、直接插入排序、冒泡排序、直接选择排序。

    A.3

    B.4

    C.5

    D.6


    正确答案:B
    解析:此题考察考生对稳定排序概念的理解。稳定排序算法是指在排序过程中两个排序关键字相同的元素,在排序的过程中位置不发生变化。例如对数列:62,42,12,36,4,12,67进行排序时,第一个12在排序完毕以后要排在第二个12的前面,这就是稳定的排序。有些人可能会发出疑问:既然都是12,为什么一定要保证它的顺序呢?举一个简单的例子:如果组织一次有奖答题活动,选手在电脑上答完题以后,就直接提交数据,最后按答题得分奖励前:100名参赛选手,这样会出现一个问题,即如果同时有10个人并列第100名,而我们只能给一个人发奖,到底给谁发呢?最合理的判断标准是给先提交答案的人发奖。这样稳定排序就可以用上了。以上的这些排序算法中,归并排序、基数排序、直接插入排序和冒泡排序是稳定的,其它的都不稳定。

  • 第4题:

    快速排序算法在排序过程中,在待排序数组中确定一个元素为基准元素,根据基准元素把待排序数组划分成两个部分,前面一部分元素值小于等于基准元素,而后面一部分元素值大于基准元素。然后再分别对前后两个部分进一步进行划分。根据上述描述,快速排序算法采用了 (61) 算法设计策略。已知确定基准元素操作的时间复杂度为,则快速排序算法的最好和最坏情况下的时间复杂度为 (62) 。

    A.分治

    B.动态规划

    C.贪心

    D.回溯


    正确答案:A
    本题考查快速排序算法。快速排序算法是应用最为广泛的排序算法之一。其基本思想是将n个元素划分为两个部分:一部分元素值小于某个数;另一部分元素值大于某个数,该数的位置确定;然后进一步划分前面部分和后面部分。根据该叙述,可以知道,这里采用的是分治算法设计策略。由于已知划分操作的时间复杂度为,不需要合并子问题的答案。对于最好的情况,应该是每次划分都把n个元素划分为大约2个n/2个元素的子数组,此时T(n)=2T(n/2)+解该递归式,可得时间复杂度为。若刚好划分的极度不均衡,即每个划分刚好把n个元素划分为一边0个元素,一边n-l个元素,此时T(n)=T(n/1)+解该递归式,可得时间复杂度为。

  • 第5题:

    快速排序算法在排序过程中,在待排序数组中确定一个元素为基准元素,根据基准元素把待排序数组划分成两个部分,前面一部分元素值小于等于基准元素,而后面一部分元素值大于基准元素。然后再分别对前后两个部分进一步进行划分。根据上述描述,快速排序算法采用了( )算法设计策略。已知确定基准元素操作的时间复杂度为Θ(n),则快速排序算法的最好和最坏情况下的时间复杂度为(请作答此空)。


    答案:D
    解析:
    快速排序采用分治法的思想。快速排序最好情况的时间复杂度是O(nlog2n)。最坏情况下,即初始序列按关键字有序或者基本有序时,快速排序的时间复杂度为O(n2)。

  • 第6题:

    快速排序算法在排序过程中,在待排序数组中确定一个元素为基准元素,根据基准元素把待排序数组划分成两个部分,前面一部分元素值小于等于基准元素,而后面一部分元素值大于基准元素。然后再分别对前后两个部分进一步进行划分。根据上述描述,快速排序算法采用了()算法设计策略。

    • A、分治
    • B、动态规划
    • C、贪心
    • D、回溯

    正确答案:A

  • 第7题:

    快速排序算法是基于()的一种排序算法。


    正确答案:分治策略

  • 第8题:

    以下排序算法中,属于交换排序的算法有()

    • A、希尔排序
    • B、冒泡排序
    • C、快速排序
    • D、简单选择排序

    正确答案:B,C

  • 第9题:

    如果待排序序列中两个数据元素具有相同的值,在排序前后它们的相互位置发生颠倒,则称该排序算法是不稳定的,()就是不稳定的排序方法。

    • A、起泡排序
    • B、归并排序
    • C、Shell排序
    • D、直接插入排序
    • E、简单选择排序

    正确答案:C,E

  • 第10题:

    如果待排序序列中两个数据元素具有相似的值,在排序前后它们的相互位置发生颠倒,则称该排序算法是不稳定的,()就是不稳定的排序算法。

    • A、起泡排序
    • B、归并排序
    • C、Shell排序
    • D、直接插入排序
    • E、简单选择排序

    正确答案:C,E

  • 第11题:

    多选题
    以下排序算法中,属于交换排序的算法有()
    A

    希尔排序

    B

    冒泡排序

    C

    快速排序

    D

    简单选择排序


    正确答案: A,B
    解析: 暂无解析

  • 第12题:

    填空题
    快速排序算法是基于()的一种排序算法。

    正确答案: 分治策略
    解析: 暂无解析

  • 第13题:

    卡诺图写出逻辑表达使。(威盛VIA 2003.11.06 上海笔试试题)


    正确答案:
        

  • 第14题:

    用一种编程语言写n!的算法。(威盛VIA 2003.11.06 上海笔试试题)


    正确答案:
        

  • 第15题:

    5 写出下列算法的时间复杂度。

    (1)冒泡排序;

    (2)选择排序;

    (3)插入排序;

    (4)快速排序;

    (5)堆排序;

    (6)归并排序;


    正确答案:
     

  • 第16题:

    如果待排序中两个数据元素具有相同的值,在排序后它们的相互位置发生颠倒,则称该排序算法不稳定,( )就是不稳定的排序算法。

    A.冒泡排序
    B.归并排序
    C.直接插入排序
    D.Shell排序

    答案:C
    解析:
    所谓排序就是要整理文件中的记录,使之按关键字递增(或递减)次序排列起来。直接插入排序的过程为在插入第i个记录时,R1,R2,…,Ri-1已经排好序,将第i个记录的排序码岛依次和R1,R2,…,Ri-1的排序码逐个进行比较,找到适当的位置。在这个排序过程中,如果发现两个数相等,则在已排好序的数前面插入这个相等的数,这样与原序列发生了颠倒,是不稳定的排序算法。

  • 第17题:

    占用的额外空间的空间复杂度为0(1)的排序算法是()。

    A.堆排序算法
    B.归并排序算法
    C.快速排序算法
    D.以上答案都不对

    答案:A
    解析:
    归并排序中,由于每一趟都要一个TR数组来复制,因此需要与待排记录等量的辅助空间O(n);而快速排序中的递归所耗费的栈空间最好情况下也要O(logn);堆排序仅在交换是需要一个记录的辅助空间。

  • 第18题:

    在下列各种排序算法中,不是以“比较”作为主要操作的算法是()

    • A、选择排序
    • B、冒泡排序
    • C、插入排序
    • D、基数排序

    正确答案:D

  • 第19题:

    简述归并排序算法和快速排序算法的分治方法。


    正确答案: 1)归并排序的分治是将数组从中间分开,分别对前后来那个部分进行排序,将排序后的两个数组合并成整个数组的排序。这样分治为递归过程,直到一个元素时返回。
    2)快速排序的分治是选取分割元素,以分割元素为界,将数组分成两部分,一部分小于分割元素,一部分大于分割元素,分别对两部分排序。

  • 第20题:

    大多数排序算法都有两个基本的操作:()和()。


    正确答案:比较;移动

  • 第21题:

    如果待排序序列中两个数据元素具有相同的值,在排序前后它们的相互位置发生颠倒,则称该排序算法是不稳定的。()就是不稳定的排序方法。

    • A、起泡排序
    • B、归并排序
    • C、Shell排序
    • D、直接插入排序

    正确答案:C

  • 第22题:

    填空题
    大多数排序算法都有两个基本的操作:()和()。

    正确答案: 比较,移动
    解析: 暂无解析

  • 第23题:

    多选题
    如果待排序序列中两个数据元素具有相似的值,在排序前后它们的相互位置发生颠倒,则称该排序算法是不稳定的,()就是不稳定的排序算法。
    A

    起泡排序

    B

    归并排序

    C

    Shell排序

    D

    直接插入排序

    E

    简单选择排序


    正确答案: B,C
    解析: 暂无解析