題目:在乙個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 不是從零開始的。你可以假設每個輸入只對應唯一的答案,而且你不可...