劍指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