劍指Offer之調整數組順序使奇數位於偶數前麵
#include <stdio.h> #include <malloc.h> int *number; void SortOddBeforeEven(int *number,int n){ int left = 0,right = n-1; //下標 int oIndex = 0,eIndex = 0; //二分遍曆 while(left < right){ //從左邊直到第一個偶數 while(left < right && (number[left] % 2 != 0)){ left++; } //從右邊直到第一個奇數 while(left < right && (number[right] % 2 == 0)){ right--; } //奇偶數交換 if(left < right){ int temp; temp = number[left]; number[left] = number[right]; number[right] = temp; } } } int main() { int i,n; while(scanf("%d",&n) != EOF){ number = (int *)malloc(sizeof(int)*n); for(i = 0;i < n;i++){ scanf("%d",&number[i]); } SortOddBeforeEven(number,n); for(i = 0;i < n;i++){ if(i == n-1){ printf("%d\n",number[i]); } else{ printf("%d ",number[i]); } } } return 0; }
- 題目描述:
-
輸入一個整數數組,實現一個函數來調整該數組中數字的順序,使得所有的奇數位於數組的前半部分,所有的偶數位於位於數組的後半部分,並保證奇數和奇數,偶數和偶數之間的相對位置不變。
- 輸入:
-
每個輸入文件包含一組測試案例。
對於每個測試案例,第一行輸入一個n,代表該數組中數字的個數。
接下來的一行輸入n個整數。代表數組中的n個數。
- 輸出:
-
對應每個測試案例,
輸入一行n個數字,代表調整後的數組。注意,數字和數字之間用一個空格隔開,最後一個數字後麵沒有空格。
- 樣例輸入:
-
5 1 2 3 4 5
- 樣例輸出:
-
1 3 5 2 4
/********************************* * 日期:2013-11-15 * 作者:SJF0115 * 題號: 題目1516:調整數組順序使奇數位於偶數前麵 * 來源:https://ac.jobdu.com/problem.php?pid=1516 * 結果:AC * 來源:劍指Offer * 總結: **********************************/ #include <stdio.h> #include <malloc.h> int *number; void SortOddBeforeEven(int *number,int n){ if(n <= 0 || number == NULL){ return; } int oIndex = 0,eIndex = 0,i; int *odd,*even; odd = (int *)malloc(sizeof(int)*n); even = (int *)malloc(sizeof(int)*n); //尋找奇偶數 for(i = 0;i < n;i++){ //奇數 if(number[i] & 0x1 != 0){ odd[oIndex++] = number[i]; } //偶數 else{ even[eIndex++] = number[i]; } } //輸出奇數 for(i = 0;i < oIndex;i++){ //隻有奇數 if(i == oIndex - 1 && eIndex == 0){ printf("%d",odd[i]); } else{ printf("%d ",odd[i]); } } //輸出偶數 for(i = 0;i < eIndex;i++){ if(i != eIndex - 1){ printf("%d ",even[i]); } else{ printf("%d",even[i]); } } printf("\n"); } int main() { int i,n; while(scanf("%d",&n) != EOF){ number = (int *)malloc(sizeof(int)*n); for(i = 0;i < n;i++){ scanf("%d",&number[i]); } SortOddBeforeEven(number,n); } return 0; }
最後更新:2017-04-03 14:54:18