• 面试题集锦_2


     整型数组int A[nSize],其中隐藏着若干个0,其余非0整数,写一个函数int Func(int *S,int size), 使A把0移至后面,非0整数移至数组前面并保持有序,返回值为原数据中第一个元素为0的下标。(尽可能不使用辅助空间且考虑效率及异常问题,注释规范且给出设计思路)。

     1 #include<stdio.h>
     2 #include<stdlib.h>
     3 int  Func(int a[],int size)
     4 {
     5     int temp;//用于交换数组的临时变量
     6     int count1=0,count2=0;//用于统计0的个数
     7     int    first,first2;//用于记录元素0第一次出现的位置
     8     int    len=0,fu_first;//len用于遍历数组的变量,fu_first用于记录排序后第一个负数出现的位置
     9     for(int i=0;i<size;i++)
    10     {
    11         {
    12             if(a[i]==0)
    13             {
    14                     count1++;
    15                     if(count1==1)
    16                     first=i;
    17             }//判断第一个是否为0
    18             for(int j=i+1;j<size;j++)
    19             if(a[i]<a[j])
    20              {
    21                 if(a[j]==0)
    22                 {
    23                     count1++;
    24                     if(count1==1)
    25                     first=j;
    26                 }
    27                 temp=a[i];
    28                 a[i]=a[j];
    29                 a[j]=temp;
    30              }
    31         }
    32     }
    33     while(len<size)
    34     {
    35          if(a[len]==0)
    36          {
    37              count2++;
    38              if(count2==1)
    39              {
    40                first2=len;//再找到排序后元素为0的第一个位置
    41              }
    42          }
    43          if(a[len]<0)
    44          {
    45              fu_first=len;//找到排序好后,第一个元素是负数的位置
    46              break;
    47          }
    48          len++;
    49     }
    50     for(int k1=0;k1<count2;k1++)//移的次数应该是根据0的个数
    51       for(int k2=first2;k2<size-1;k2++)
    52              a[k2]=a[k2+1];//数组往前移,找到第一个0的位置后,数组依次往前移
    53     for(int k3=size-count2;k3<size;k3++)
    54              a[k3]=0;//后面的赋值为0
    55     return first;
    56 }
    57 int main()
    58 {
    59     int a[10]={9,5,3,1,-2,0,-4,6,0,-8};
    60     int result=Func(a,10);
    61     printf("原数据中第一个元素为0的下标:%d\n",result);
    62     for(int i=0;i<10;i++)
    63     {
    64         printf("%d",a[i]);
    65     }
    66 }
    View Code

     题目涉及到排序,对于不适用辅助空间,考虑效率问题还没有什么好的想法,只是简单地把题目的要求实现,知道还是不够好,不过现在目前还只能做成这样,以后不断改进吧。

  • 相关阅读:
    ios ASI 断点下载
    ios 视频播放器MPMoviePlayerController
    ios SDWebImage 图片加载显示菊花
    ios简单的音频播放
    学iOS开发(一)——实现一款App之Foundation框架的使用
    学iOS开发(二)——实现一款App之编写自定义类
    蓝欧ios培训视频
    ios开发教程地址
    day15_雷神_前端03
    day14_雷神_前端02
  • 原文地址:https://www.cnblogs.com/wj204/p/3125363.html
Copyright © 2020-2023  润新知