您好,登錄后才能下訂單哦!
第一種:
開辟一個一樣大小的數(shù)組,遍歷原數(shù)組的數(shù)據(jù),把原數(shù)組奇數(shù)依次存放在新數(shù)組的前面,偶數(shù)存放在后面。
時間復(fù)雜度:O(n^2);
空間復(fù)雜度: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; }
結(jié)果:
第二種:
利用兩個指針,一個指向數(shù)組開始,一個指向數(shù)組末尾,指向數(shù)組開始的那個指針依次向后遍歷,找到偶數(shù)立即停下來,指向數(shù)組末尾的那個指針向前遍歷,找到奇數(shù)停下來,判斷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; }
結(jié)果:
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。