数据结构第二次作业----逆置,插入,选择

1. 设计一个高效算法,将顺序表中的所有元素逆置,要求算法的时间复杂度为O(n),空间复杂度为O(1)。

(1)算法分析:因为时间复杂度为O(n),所以我们采用一次循环来实现,想要逆置只要依次首尾元素交换即可。

temp=L.a[i];
L.a[i]=L.a[n-i-1];
L.a[n-i-1]=temp;

(2)算法实现:

#define MAXSIZE 100
   typedef struct{
             ElemType a[MAXSIZE+1];
   			 int n;
   			 }sqlit;
   	void nizhi(sqlit &L,int i){
   		int temp=0;
   		for(i=0;i<n/2;i++){
   		 temp=L.a[i];
         L.a[i]=L.a[n-i-1];
         L.a[n-i-1]=temp;
   		       }
   		}
2、 设顺序表L中的数据元素值递增有序。试设计一个算法,将x插入到顺序表L的适当位置上,以保持L的有序性。

(1)算法分析:首先要找到这个元素要插在哪里,也就是它的插入位置,其余就很简单了,就不再叙述了。

for(int i=0;i<L.n;i++){
    if(x>L.a[i]&&x<L.a[i+1]){
         int flag=i+1;		//flag就是元素x要插入的位置
    }

(2)算法实现:

#define MAXSIZE 100
   typedef struct{
             ElemType a[MAXSIZE+1];
   			 int n;
   			 }sqlit;
   void charu(sqlit &L,int i,ElemType x){
   		for(i=0;i<L.n;i++){
   			if(x>L.a[i]&&x<L.a[i+1]){
   			    for(int j=n;j>=i+1;j++){
   			     L.a[j]=L.a[j-1];
   			     }
   			     L.a[i+1]=x;break;
   			                            }
   			               }
   			     }
3、 有一个顺序表L,其元素为整型,设计一个算法将L中所有小于0的整数放在前半部分,大于等于0的整数放在后半部分,要求时间复杂度为O(n)、空间复杂度为O(1).

(1)算法设计:

#define MAXSIZE 100
   typedef struct{
             ElemType a[MAXSIZE+1];
   			 int n;
   			 }sqlit;
   		void xuanze(sqlit &L,int i,int j){
   		   for(i=0,j=0;i<l.n;i++){
   		   if(L.a[i]<0){
   		   L.a[j++]=L.a[i];}
   		   flag=j;
   		   }
   		   for(i=0,j=0;i<l.n;i++){
   		   if(L.a[i]>0){
   		   L.a[flag++]=L.a[i];}
   		   }
   		   }
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值