您好,登錄后才能下訂單哦!
第一種:
開辟一個一樣大小的數組,遍歷原數組的數據,把原數組奇數依次存放在新數組的前面,偶數存放在后面。
時間復雜度: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; }
結果:
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。