#define LEN 10 #include<stdio.h> #include<stdlib.h> int main() { int arr[LEN] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 0 };//數組的初始化 int odd[LEN] = { 0 };//用來存儲奇數 int dou[LEN] = { 0 };//用來存儲偶數 int j = 0; int k = 0; for (int i = 0; i < LEN; i++) { if (arr[i] % 2) { odd[j] = arr[i]; j++; } else { dou[k] = arr[i]; k++; } } for (int i = 0; i < LEN; i++)//對目標數組的更改 { if (i <= j) { arr[i] = odd[i]; } else { arr[i] = dou[i - j - 1]; } } for (int i = 0; i < LEN; i++) { printf("%d ", arr[i]); } system("pause"); return 0; }
思路2:如果不允許創建新的空間變量怎麼辦呢,我們可以用冒泡排序的思想來解決這個問題,如果這個數是奇數,我們就把它冒泡的數組頂端,依次冒泡下去,我們就能得到答案,實現代碼如下:
#include<stdio.h> int* doubleline(int *a, int size)//冒泡排序實現奇偶排序所封裝的函數 { int i = 0; for (i = 0; i < size; i++)//冒泡過程 { for (int j = 0; j < size - i - 1; j++) { if ((*(a + j) % 2)==0) { int tmp = *(a + j); *(a + j) = *(a + j + 1); *(a + j + 1) = tmp; } } } return a; } int main()//調試過程 { int arr[] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 0 }; int size = sizeof(arr) / sizeof(int);//求取數組大小 int *p = doubleline(arr, size); for (int i = 0; i < size; i++) { printf("%d ",*(p+i)); } system("pause"); return 0; }
個人認為冒泡排序雖然節省了空間,但是如果數組特別大的時候這樣做的效率是極其低下的,希望運用的時候斟酌下。 如有什麼不足之處,希望批評指正。