调整数组顺序使奇数位于偶数前面

来源:互联网 发布:乐乎pt被关了 编辑:程序博客网 时间:2024/06/05 03:22

第一种:

开辟一个一样大小的数组,遍历原数组的数据,把原数组奇数依次存放在新数组的前面,偶数存放在后面。

时间复杂度:O(n^2);

空间复杂度:O(n)

缺陷:效率太差

#include<stdio.h>#include<stdlib.h>void Adjust(int* src,int* des,int n){int index=0;for(int j=0;j<n;j++){if(src[j]%2){des[index]=src[j];index++;}}for(int j=0;j<n;j++){if(!(src[j]%2)){des[index]=src[j];index++;}}}void test(){int a1[10]={2,4,4,66,76,86,20,10,24,18};int a2[10]={1,3,5,35,15,13,17,19,17,21};int a3[10]={1,2,5,36,16,13,17,19,14,21};int a[10];Adjust(a3,a,sizeof(a3)/sizeof(a3[0]));for(int i=0;i<sizeof(a3)/sizeof(a3[0]);i++){printf("%d ",a3[i]);}printf("\n");for(int i=0;i<sizeof(a)/sizeof(a[0]);i++){printf("%d ",a[i]);}}int main(){test();system("pause");return 0;}

结果:

wKiom1cu6THRYEX-AAAcFk1xtdY365.png

第二种:

利用两个指针,一个指向数组开始,一个指向数组末尾,指向数组开始的那个指针依次向后遍历,找到偶数立即停下来,指向数组末尾的那个指针向前遍历,找到奇数停下来,判断start<=end,,交换两个值。

#include<stdio.h>#include<stdlib.h>bool Check(int num){return num%2;}void swap(int* a,int *b){int tmp=*a;*a=*b;*b=tmp;}void Adjust(int* a,int n){int start=0;int end=n-1;while(start<=end){while(Check(a[start])&&start<=end){start++;}while(!(Check(a[end]))&&start<=end){end--;}if(start<end){swap(&a[start],&a[end]);}}}void test(){int a1[10]={2,4,4,66,76,86,20,10,24,18};int a2[10]={1,3,5,35,15,13,17,19,17,21};int a3[10]={1,2,5,36,16,13,17,19,14,21};Adjust(a1,sizeof(a1)/sizeof(a1[0]));for(int i=0;i<sizeof(a1)/sizeof(a1[0]);i++){printf("%d ",a1[i]);}printf("\n");Adjust(a2,sizeof(a2)/sizeof(a2[0]));for(int i=0;i<sizeof(a2)/sizeof(a2[0]);i++){printf("%d ",a2[i]);}printf("\n");Adjust(a3,sizeof(a3)/sizeof(a3[0]));for(int i=0;i<sizeof(a3)/sizeof(a3[0]);i++){printf("%d ",a3[i]);}}int main(){test();system("pause");return 0;}

结果:

wKioL1cu67zwDNM6AAAkq1cecHI687.png

本文出自 “liveyoung” 博客,转载请与作者联系!

0 0
原创粉丝点击