求优化(数组元素奇偶排列)前面奇数,后面偶数
本帖最后由 一世轻尘 于 2020-12-27 09:13 编辑贴代码发不出来{:10_266:} 简单说说哪里要怎么改就行 可以再定义两个数组,把奇偶数分别储存到里面,这样时间复杂度是O(n) 巴巴鲁 发表于 2020-12-27 10:04
可以再定义两个数组,把奇偶数分别储存到里面,这样时间复杂度是O(n)
题目要求不能增添数组 根据你的代码优化了一下
#include<stdio.h>
void arrsort(int a[],int n)
{
int *p,*q,temp;
p = a;
q = a+n;
while(p < q)
{
if(*q%2 == 0)
{
q--;
continue;
}
else if(*p%2 != 0)
{
p++;
continue;
}
else
{
temp = *p;
*p = *q;
*q = temp;
p++;
q--;
}
}
}
int main(void)
{
int a,i;
for(i = 0; i < 10; i++)
{
scanf("%d",&a);
}
arrsort(a,10);
for(i = 0; i < 10; i++)
{
printf("%d ",a);
}
return 0;
} 中间为输入的内容
本帖最后由 jackz007 于 2020-12-27 18:25 编辑
已经解决了,我也做了一个,请楼主参考,多一个思路可以多一个借鉴
#include <stdio.h>
void swap(int * a , int * b)
{
int t ;
t = * a ;
* a = * b ;
* b = t ;
}
main(void)
{
int d , i , j, n = 10 ;
printf("请输入 %d 个整数 : " , n) ;
for(i = 0 ; i < n ;i ++) scanf("%d" , & d) ;
for(i = 0 ; i < n ; i ++) {
for(; i < n && d % 2 ; i ++) ; // 寻找第一个偶数
for(j = i ; j < n && ! (d % 2) ; j ++) ; // 寻找这个偶数后面的奇数
if(j < n) swap(&d , & d) ; // 如果找到就互换 d、
}
printf("%d" , d) ;
for(i = 1 ; i < n ; i ++) printf(" %d" , d) ;
printf("\n") ;
}
页:
[1]