劍指offer 調整陣列順序使奇數字於偶數前面

2021-08-26 15:10:05 字數 1923 閱讀 5714

題目:輸入乙個整數陣列,實現乙個函式來調整陣列中數字的順序,是的所有的奇數字於陣列的前半部分,所有的偶數字於陣列的後半部分。

思路:我們可以維護兩個指標,第乙個指標初始化指向陣列的第乙個數字,他只想後移動;第二個指標初始化指向陣列的最後乙個數字,他只向前移動。在這兩個指標相遇之前,第乙個指標總是位於第二個指標的前面,如果第乙個指標指向的是偶數,第二個指標指向的是奇數,我們就交換著兩個數字。

**:

void reorderoddeven(int* pdata, unsigned int

length)

int* pbegin = pdata;

int* pend = pdata + length - 1;

while (pbegin < pend)

//找奇數

while (pbegin < pend && (*pend & 0x1) == 0)

if (pbegin < pend)

}}

測試函式:

int main()

; int

length = sizeof(arr) / sizeof(arr[0]);

for (i = 0; i < length; i++)

printf("\n");

reorderoddeven(arr, length);

for (i = 0; i < length; i++)

printf("\n");

return

0;}

對於上述**,判斷乙個數是奇數還是偶數採用的是位運算進行判斷的,這是因為位運算的效率要遠高於乘除法以及取餘操作的效率。

擴充套件:1.可以將題目變為陣列中按照大小分為兩部分,所有負數都在非負數的前面,

2.所有能被三整除的整數都放在不能被三整除的整數之前。

對於這個兩個問題我們完全不需要去大幅度的改變**,只需要對於判斷條件進行改變即可。我們就可以將這個判斷條件變成乙個函式指標,也就是採用乙個單獨的函式來判斷數字是不是符合標準。

改變如下:

//判斷是不是偶數

bool iseven(int n)

//判斷能不能被三整除

bool isdiv3(int n)

//判斷是不是負數

bool isminus(int n)

bool

void reorderoddeven(int* pdata, unsigned int

length, bool (*func) (int))

int* pbegin = pdata;

int* pend = pdata + length - 1;

while (pbegin < pend)

//找奇數

while (pbegin < pend && func(*pend))

if (pbegin < pend)

}}

測試函式:

int main()

; int

length = sizeof(arr) / sizeof(arr[0]);

for (i = 0; i < length; i++)

printf("\n");

reorderoddeven(arr, length, iseven);

reorderoddeven(arr, length, isdiv3);

reorderoddeven(arr, length, isminus);

for (i = 0; i < length; i++)

printf("\n");

return

0;}

採用函式指標的方法就可以提高**的重用性,為功能擴充套件提供了便利。

劍指offer 調整陣列順序

時間限制 1秒 空間限制 32768k 本題知識點 陣列 題目描述 輸入乙個整數陣列,實現乙個函式來調整該陣列中數字的順序,使得所有的奇數字於陣列的前半部分,所有的偶數字於陣列的後半部分,並保證奇數和奇數,偶數和偶數之間的相對位置不變。首先想到的是利用兩個輔助陣列,乙個儲存奇數,乙個儲存偶數,這樣的...

劍指offer(調整陣列順序)

輸入乙個整數陣列,實現乙個函式來調整該陣列中數字的順序,使得所有的奇數字於陣列的前半部分,所有的偶數字於陣列的後半部分,並保證奇數和奇數,偶數和偶數之間的相對位置不變。1 暴力解法 從前到位掃瞄陣列,如果出現前面是偶數後面是奇數的情況,則交換。其中使用氣泡排序的思想。從後面朝前比較,使用外迴圈控制趟...

劍指offer(十三) 調整陣列順序

題目描述 輸入乙個整數陣列,實現乙個函式來調整該陣列中數字的順序,使得所有的奇數字於陣列的前半部分,所有的偶數字於陣列的後半部分,並保證奇數和奇數,偶數和偶數之間的相對位置不變。題解 思路簡單的解法就是,建兩個臨時陣列,乙個奇數陣列,乙個偶數陣列,最後再組合起來即可,時間複雜度為o n 一解 pub...