注册 登录
编程论坛 数据结构与算法

求大神给写一段代码

二蛋 发布于 2012-11-23 12:30, 579 次点击
将n个正整数存放于一个一维数组a中,试设计一个算法,将所有的奇数移动并存放于数组的前半部分,将所有的偶数移动并存放于数组的后半部分,要求尽可能少地使用临时存储单元,并使计算时间达到O(n)。
6 回复
#2
二蛋2012-11-23 12:30
暂时还没有积分,没办法,求助,好人一生平安。
#3
yuccn2012-11-23 15:37
void test(int *pAddr, int nCount)
{
    if (pAddr == NULL) {
        return;
    }
     int nBegin = 0;
     int nEnd = nCount-1;

    while (nBegin < nEnd) {
        // 找到最前面的偶数
        while (pAddr[nBegin] % 2 == 1) {// 基数
            nBegin++;
        }
        
        // 找到最前后的基数
         while (pAddr[nEnd] % 2 == 0) {// 偶数
            nEnd--;
        }
        
        if (nBegin < nEnd) {
            int temp = pAddr[nBegin];
            pAddr[nBegin] = pAddr[nEnd];
            pAddr[nEnd] = temp;            
        }        
    }     
}

int main()
{
    int n[] = { 1,2,3,4,5,6,76,896,9,9,9,9,9,9,8,8,0,12};
    test(n, sizeof(n)/ sizeof(int));                  
}
#4
yuccn2012-11-23 15:40
保证了基数在前,偶数在后,并没有按大小排序
#5
凌云飞翔2012-11-23 17:04
#include <stdio.h>
main ()
{ int a[20] ,t ,k ,i ,m ,n ;
 printf ("请输入数字的个数:\n") ;
 scanf ("%d", &t ) ;
 printf ("请输入数字:\n")  ;
 for (i=0 ;i<t ;i++ )
     scanf ("%d",&a[i]) ;
   k=t ;
 for (i=0;i<t;i++)
     if(a[i]%2==0)
     if (a[t-1]%2!=0)
     {   m=a[i] ;
          a[i]=a[t-1]  ;
          a[t-1]=m ;
          t--  ;
     }
     else
     {while (i<t)
     {    t--  ;
         if (a[t-1]%2!=0)
     {   m=a[i] ;
          a[i]=a[t-1]  ;
          a[t-1]=m ;
          t-- ;
          break ;
         } // if
     } //while
     }// else
     for (n=0 ;n<k ;n++)
         printf ("%4d",a[n]);
       printf ("\n")  ;
}      你先试试吧 ,有问题咱再讨论
#6
一个孩子2012-11-23 19:57
程序代码:
#include<stdio.h>
#define N 100
void sort(int a[N],int n)
{
    int i,j,temp;
    for(i=0;i<n-1;i++)
    {
        for(j=0;j<n-i-1;j++)
        {
           if(a[j]>a[j+1])
           {
               temp=a[j];
               a[j]=a[j+1];
               a[j+1]=temp;
           }
        }
    }
}
int main()
{
    int n,i,j,k;
    int m,p;
    int a[N];
    int b[N],c[N];
    printf("please input the nubers of the arrry!\n");
    scanf("%d",&n);
    printf("input the arry!\n");
    for(i=0;i<n;i++)
    {
        scanf("%d",&a[i]);
    }
    printf("the orginal arry is \n");
    for(i=0;i<n;i++)
        printf("%d ",a[i]);
    putchar(10);
    i=0;
    j=0;k=0;
    while(i<n)
    {
        if(a[i]%2!=0)
            b[j++]=a[i++];
        else
            c[k++]=a[i++];
    }
    sort(b,j);//奇数排序
    sort(c,k);//偶数排序
    i=0;
    m=0;p=0;
    if(i<n)
    {
        while(m<j)
        {
            a[i++]=b[m++];
        }
        while(p<k)
        {
            a[i++]=c[p++];
        }
    }
    for(i=0;i<n;i++)
        printf("%d ",a[i]);
    putchar(10);
    return 0;
}
保证运行~~·不知道你的尽量少的用存储空间是啥意思啊,有没有具体点的要求。 西点复试的时候出过这道题,看到这道题很亲切啦~~
#7
二蛋2012-11-24 20:57
谢谢你们,你们的代码我都研究了。
1