標籤:

調整數組順序使奇數位於偶數前面

調整數組順序使奇數位於偶數前面

輸入一個整數數組,實現一個函數來調整數組中數字的順序,

使所有奇數位於數組的前半部分,所有偶數位於數組的後半部分。

思路:我們維護2個指針,第一個指針初始化時指向數組的第一個數字,只向後移動,

第二個指針初始化時指向數組的第二個數字,只向前移動,

如果第一個指向偶數,第二個指向奇數,則交換。

參考代碼:

#include <stdio.h>int isEven(int n){ return (n & 1) == 0;}void reorder(int* pdata,unsigned int len,int (*func)(int)){ if(pdata == NULL || len == 0) return; int* start = pdata; int* end = pdata + len - 1; while(start < end) { while(start < end && !func(*start)) ++start; while(start < end && func(*end)) --end; if(start < end) { int tmp = *start; *start = *end; *end = tmp; } }}int main(){ int pdata[10] = {0,1,2,3,4,5,6,7,8,9}; reorder(pdata,10,isEven); for(int i = 0;i < 10;i++) printf("%d ",pdata[i]); printf("
"); return 0;}

推薦閱讀:

順時針列印矩陣
二叉樹的鏡像
最高分是多少
樹的子結構
反轉鏈表

TAG:演算法 | 筆試 |