《数据结构》,设计将数组A[1][n]中所有奇数移到偶数之前的算法,不另外增加存储空间,时间复杂度为o(n)

请求帮助,我学的是c语言版本的《数据结构》,多谢啦!!!!希望写的程序像是初学者做的,但能满足题意,一楼的写的很好,但是看上去太专业了,2楼不能运行... 请求帮助,我学的是c语言版本的《数据结构》,多谢啦!!!!
希望写的程序像是初学者做的,但能满足题意,一楼的写的很好,但是看上去太专业了,2楼不能运行
展开
 我来答
PcrazyC
推荐于2018-04-23 · TA获得超过1466个赞
知道小有建树答主
回答量:911
采纳率:0%
帮助的人:991万
展开全部
A[1][n]不就是A[N]吗,干嘛要这样定义?

给你写个去吃饭吧

算法的复杂度最坏为O(N),没有开辟任何额外的空间,普通变量的定义不算

搞错没有,我的不能运行,程序运行之后,你输入10个数据,用空格隔开,然后回车就行了,难道还要我把数据也全部写在程序中才行.

#include <stdio.h>
#define SIZE 10

void sort(int a[],int n)
{
int i,len,temp;
len=n-1;
for(i=0;i<len;)
{
if(a[i]&0x01==0) //判断是否为偶数
{
temp=a[len];
a[len]=a[i];
a[i]=temp;
len--;
}
else
i++;
}
}
int main()
{
int a[SIZE]={0},i;
for(i=0;i<SIZE;i++)
scanf("%d",&a[i]);
sort(a,SIZE);
for(i=0;i<SIZE;i++)
printf("%-5d",a[i]);
printf("\n");
return 0;
}
勤奋的咯虹
2019-12-07
知道答主
回答量:18
采纳率:33%
帮助的人:3.2万
展开全部
#include<stdio.h>

int main() {
   int a[10] = {3,2,1,4,6,9,8,5,12,11};
   int temp;
   int index = 0;
   
   while(a[index]%2 ==0 && index<10) {  //确定数组中第一个奇数的下标
      index++;
   }
   
   for(int i=index+1;i<10;i++) {       
      if(a[i]%2 == 0) {  //确定偶数的位置后与奇数换位置
         temp = a[i];
         a[i] = a[index];
         a[index] = temp;
         while(a[index]%2 ==0 && index <10) {  //同时应该要找到下一个奇数的下标
             index++;
         }   
      }
   }
   
   for(int i=0;i<10;i++) { //打印输出
       printf("%d\t",a[i]);

   }
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
洒脱且惟妙惟肖的赤子05
2008-04-20
知道答主
回答量:54
采纳率:0%
帮助的人:0
展开全部
我是PcrazyC的小号,你把分给他,谢谢合作,我更改次数好像过多了,不能改了,郁闷

不好意思,好像是没有改变,我在处理判断偶数的时候没有考虑到优先级的问题,所以出错了,现在的没问题了,你自己可以看看

算法:
从第一个数开始,如果是偶数,与最后一个数交换,同时将最后一个数排除出去,不用处理了;如果是奇数的话,就继续下一次循环....这样进行下去,直到这个数是应该处理的数的最后一个为止

#include <stdio.h>
#define SIZE 10

void sort(int a[],int n)
{
int i,len,temp;
len=n-1;
for(i=0;i<len;)
{
if((a[i]&0x01)==0) //判断是否为偶数
{
temp=a[len];
a[len]=a[i];
a[i]=temp;
len--;
}
else
i++;
}
}
int main()
{
int a[SIZE]={0},i;
for(i=0;i<SIZE;i++)
scanf("%d",&a[i]);
sort(a,SIZE);
for(i=0;i<SIZE;i++)
printf("%-5d",a[i]);
printf("\n");
return 0;
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
心中风情4
2008-04-14 · TA获得超过2247个赞
知道大有可为答主
回答量:1779
采纳率:66%
帮助的人:1279万
展开全部
#include <stdio.h>
void move(int a[], int n)
{
int i=0,j=n-1;
while(i<j)
{
if(i<j && a[i]%2!=0) ++i;
while(i<j && a[j]%2==0) --j;
if(i<j)
{
a[i] = a[i]+a[j];
a[j] = a[i]-a[j];
a[i] = a[i]-a[j];
}
}
}

void main()
{
int a[3][11] = {{0},{23,34,12,45,34,56,767,545,345,4,547},{0}};
int i;
printf("Befroe moving: ");
for(i=0; i<11; ++i)
{
printf("%d ", a[1][i]);
}
move(a[1], 11);
printf("\n");
printf("After moving: ");
for(i=0; i<11; ++i)
{
printf("%d ", a[1][i]);
}
printf("\n");
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友63e9271
2008-04-14 · 超过22用户采纳过TA的回答
知道答主
回答量:85
采纳率:0%
帮助的人:81.7万
展开全部
int p =0;
int tem;
fro(int i=0;i<n;i++)//n为数组的长度
{
if( 。。。)//判断是否为偶数
{
if(i>p)
{
tem=a[i];
a[i]=a[p];
a[p]=tem;
}
p++;
}
}

要自己在改改
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(5)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式