每日一道演算法題 奇偶排序

2021-06-27 03:48:29 字數 1225 閱讀 2438

題目:在乙個n個整數陣列裡面,有多個奇數和偶數,設計乙個演算法,令所有的奇數都在偶數左邊。

解題思路:想到的第乙個思路是定義兩個指標,第乙個指標p指向陣列的第乙個元素,第二個指標q指向陣列的最後乙個元素,然後讓p向後遍歷,讓q向前遍歷,直到p找到第乙個偶數,q找到第乙個奇數,交換兩個元素,繼續讓兩個指標遍歷陣列,直到q在p的前面,這樣就保證陣列中所有奇數在偶數前面。**如下:

#include using namespace std;

void swap(int& a, int& b)

void odd_before_even(int *arr, int length)

int start = 0;

int end = length - 1;

while (start < end)

while ((start < end) && ((arr[start] & 1) != 0))

if (start < end)

}}int main();

int length = sizeof(a)/sizeof(int);

odd_before_even(a, length);

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

system("pause");

return 0;

}

在演算法導論講解快速排序時,對子陣列進行排序的分治過程包括三個子過程:(1)將陣列分解成兩個子陣列;(2)通過遞迴呼叫快速排序,對兩個字陣列進行排序;(3)再將兩個子陣列進行排序。那麼將陣列中奇數排在偶數前面,可以通過快速排序實現,**如下:

#include using namespace std;

bool iseven(int n)

void swap(int& a, int& b)

void odd_before_even(int *pdata, unsigned int length, bool (*func)(int))

}}int main();

int length = sizeof(arr)/sizeof(int);

odd_before_even(arr, 7, iseven);

for (int i = 0; i < 7; i++)

cout << endl;

system("pause");

return 0;

}

每日一道演算法題

no.1 設指標變數fron t表示鏈式佇列的隊頭指標,指標變數rear表示鏈式佇列的隊尾指標,指標變數s指向將要入佇列的結點x,則入佇列的操作序列為 a.front next s front s b.s next rear rear s crear next s rear s d.s next f...

每日一道演算法題

no.1 若有 18 個元素的有序表存放在一維陣列 a 19 中,第乙個元素放 a 1 中,現進行二分查詢,則查詢 a 3 的比較序列的下標依次為 a.1,2,3 b.9,5,2,3 c.9,5,3 d.9,4,2,3 答案 d.第一次查詢,隊首為下標1,隊尾下標18,所以是 1 18 2 9 第二...

每日一道演算法題 TwoSum

167.給定乙個已按照公升序排列 的有序陣列,找到兩個數使得它們相加之和等於目標數。函式應該返回這兩個下標值 index1 和 index2,其中 index1 必須小於 index2。說明 返回的下標值 index1 和 index2 不是從零開始的。你可以假設每個輸入只對應唯一的答案,而且你不可...