第一种:
开辟一个一样大小的数组,遍历原数组的数据,把原数组奇数依次存放在新数组的前面,偶数存放在后面。
时间复杂度: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; }
结果:
第二种:
利用两个指针,一个指向数组开始,一个指向数组末尾,指向数组开始的那个指针依次向后遍历,找到偶数立即停下来,指向数组末尾的那个指针向前遍历,找到奇数停下来,判断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; }
结果:
本文出自 “liveyoung” 博客,转载请与作者联系!
原文地址:http://10707042.blog.51cto.com/10697042/1771252