小程序(三)数组排序问题1奇偶数组排序

来源:互联网 发布:无主之地2无网络连接 编辑:程序博客网 时间:2024/06/05 02:51

对一个数组,将数组中偶数从大到小排序,奇数从小到大排序,奇数和偶数交叉着放且输出数组第一位放奇数 若奇数和偶数不等长,则把剩下的直接放到数组中。


思路:先进行奇偶判断,得到奇数和偶数数组。然后对两数组排序,进行长度判断,最后组织数据。



#include<stdio.h>#include<stdlib.h>#include<string.h>void swap(int *arr_part,int n){int temp;temp = arr_part[n];    arr_part[n] = arr_part[n+1];    arr_part[n+1] = temp; }int * arrange_arr(int *arr_part,int len_part,int flag) //从小到大排序{int m,n;for(m=0;m<len_part-1;m++)  for(n=0;n<len_part-1-m;n++)  {if(flag == 1)      {if( arr_part[n]>arr_part[n+1])//从小到大排序        swap(arr_part,n);   }else  {   if( arr_part[n]<arr_part[n+1])//从大到小排序        swap(arr_part,n);   }  }    return arr_part;}int main(){int arr[] = {2,3,4,1,44,8,12,23,19,22,57,89,11,19,25};int *arr_result;    int * arr_odd;int * arr_even;int len = sizeof(arr)/sizeof(int);arr_odd = (int *)malloc(sizeof(int)*len);//C的数组是不可以动态增长,如果你不想使用链表,可以使用指针arr_even = (int *)malloc(sizeof(int)*len);arr_result = (int *)malloc(sizeof(int)*len);int k1 = 0;int k2 = 0;for(int i=0;i<len;i++)  {  if( arr[i]%2!=0 ){arr_odd[k1] = arr[i];k1++;    }  else{arr_even[k2] = arr[i];             k2++;    }   }    int flag_odd = 1;    int *re_arr_odd =arrange_arr( arr_odd, k1, flag_odd);    int flag_even = 0;int *re_arr_even = arrange_arr(arr_even, k2, flag_even);printf("输入数列: \n");for(int p=0;p<len;p++)        printf("%d ",arr[p]);printf("\n");printf("奇数排序后的数列:");printf("\n");for(int p=0;p<k1;p++)        printf("%d ",re_arr_odd[p]);printf("\n");printf("偶数排序后的数列:");printf("\n");for(int p=0;p<k2;p++)        printf("%d ",re_arr_even[p]);printf("\n");if (k1<=k2){     int j = 0;       for(int i=0;i<k1;i++)    {    arr_result[j] = re_arr_odd[i];      arr_result[j+1] = re_arr_even[i];      j = j+2;     }      for(int i=0;i<(k2-k1);i++)   arr_result[2*k1 + i] = re_arr_even[k1 + i];}else{  int j = 0;       for(int i=0;i<k2;i++)    {    arr_result[j] = re_arr_odd[i];      arr_result[j+1] = re_arr_even[i];      j = j+2;     }          for(int i=0;i<(k1-k2);i++)   arr_result[2*k2 + i] = re_arr_odd[k2 + i];}printf("\n");printf("最终结果:\n");for(int i=0;i<len;i++)   printf("%d ",arr_result[i]);getchar();return 0;}
原创粉丝点击