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

请求帮助,我学的是c语言版本的《数据结构》,多谢啦!!!!
希望写的程序像是初学者做的,但能满足题意,一楼的写的很好,但是看上去太专业了,2楼不能运行

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;
}
温馨提示:答案为网友推荐,仅供参考
第1个回答  2019-12-07
#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]);

   }
}

第2个回答  2008-04-20
我是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;
}
第3个回答  2008-04-14
#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");
}
第4个回答  2008-04-14
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++;
}
}

要自己在改改
相似回答