調整數組順序使奇數位於偶數前面
調整數組順序使奇數位於偶數前面
輸入一個整數數組,實現一個函數來調整數組中數字的順序,
使所有奇數位於數組的前半部分,所有偶數位於數組的後半部分。
思路:我們維護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;}
推薦閱讀: