一、试设计算法在O(n)时间内将数组A[1..n]划分为左右两个.docVIP

  • 80
  • 0
  • 约3.3千字
  • 约 4页
  • 2018-12-13 发布于天津
  • 举报

一、试设计算法在O(n)时间内将数组A[1..n]划分为左右两个.doc

一、试设计算法在O(n)时间内将数组A[1..n]划分为左右两个.doc

PAGE 1 PAGE 2 厦门大学《_数据结构_ 厦门大学《_数据结构_》课程期末试卷 信息科学与技术学院计算机科学系2004年级___专业 主考教师:____试卷类型:(A卷/B卷) 一、试设计算法在O(n)时间内将数组A[1..n]划分为左右两个部分,使得左边的所有元素奇数,右边的所有元素均为偶数,要求所使用的辅助存储空间大小为O(1)。 解:该题算法的主要思路如下: (1)设置两个指针i和j,其中i=1,j=n。 (2)当ij时作如下循环: i不断自加从左往右找到第一个偶数 j不断自减从右往左找到第一个奇数 A[i]与A[j]交换 (3)算法结束 Adjust(int A[1..n]) { int i=1, j=n; while (ij ){ while (A[i] % 2 != 0 i=n) i++; while (A[i] % 2 = =0 j=1) j--; if (in || j1) break; if (ij) A[i] ?? A[j]; } } 算法的时间复杂性为O(n),辅助存储空间为O(1)。 二、写一个算法将一带头结点的单链表逆转,要求利用原表结点空间,不允许申请新的结点空间。 解: 方法一:建立一个新的单链表,其中的结点从原表得来,即每个原表中得到一个结点,就要将此结点插入新链表中。由于要将表逆转,原表的头结点成为新链表的头

文档评论(0)

1亿VIP精品文档

相关文档