一世轻尘 发表于 2020-12-27 09:12:03

求优化(数组元素奇偶排列)前面奇数,后面偶数

本帖最后由 一世轻尘 于 2020-12-27 09:13 编辑

贴代码发不出来{:10_266:}

一世轻尘 发表于 2020-12-27 09:14:49

简单说说哪里要怎么改就行

巴巴鲁 发表于 2020-12-27 10:04:55

可以再定义两个数组,把奇偶数分别储存到里面,这样时间复杂度是O(n)

一世轻尘 发表于 2020-12-27 10:07:07

巴巴鲁 发表于 2020-12-27 10:04
可以再定义两个数组,把奇偶数分别储存到里面,这样时间复杂度是O(n)

题目要求不能增添数组

巴巴鲁 发表于 2020-12-27 16:15:32

根据你的代码优化了一下
#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;
}

巴巴鲁 发表于 2020-12-27 16:17:42

中间为输入的内容

jackz007 发表于 2020-12-27 18:14:45

本帖最后由 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]
查看完整版本: 求优化(数组元素奇偶排列)前面奇数,后面偶数