
《数据结构》,设计将数组A[1][n]中所有奇数移到偶数之前的算法,不另外增加存储空间,时间复杂度为o(n)
请求帮助,我学的是c语言版本的《数据结构》,多谢啦!!!!希望写的程序像是初学者做的,但能满足题意,一楼的写的很好,但是看上去太专业了,2楼不能运行...
请求帮助,我学的是c语言版本的《数据结构》,多谢啦!!!!
希望写的程序像是初学者做的,但能满足题意,一楼的写的很好,但是看上去太专业了,2楼不能运行 展开
希望写的程序像是初学者做的,但能满足题意,一楼的写的很好,但是看上去太专业了,2楼不能运行 展开
7个回答
展开全部
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;
}
给你写个去吃饭吧
算法的复杂度最坏为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;
}
展开全部
#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]);
}
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
我是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;
}
不好意思,好像是没有改变,我在处理判断偶数的时候没有考虑到优先级的问题,所以出错了,现在的没问题了,你自己可以看看
算法:
从第一个数开始,如果是偶数,与最后一个数交换,同时将最后一个数排除出去,不用处理了;如果是奇数的话,就继续下一次循环....这样进行下去,直到这个数是应该处理的数的最后一个为止
#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;
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
#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");
}
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");
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
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++;
}
}
要自己在改改
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++;
}
}
要自己在改改
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询