閱讀977 返回首頁    go 阿裏雲 go 技術社區[雲棲]


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

  上一篇:go Java刪除文件夾和文件
  下一篇:go JSP 筆記