演算法 分治演算法及例項

2021-10-04 09:43:57 字數 1406 閱讀 1872

關於二分查詢法

二分查詢法主要是解決在「一堆數中找出指定的數」這類問題。

而想要應用二分查詢法,這「一堆數」必須有一下特徵:

儲存在陣列中

有序排列

所以如果是用鍊錶儲存的,就無法在其上應用二分查詢法了。(曽在面試被問二分查詢法可以什麼資料結構上使用:陣列?鍊錶?)

至於是順序遞增排列還是遞減排列,陣列中是否存在相同的元素都不要緊。不過一般情況,我們還是希望並假設陣列是遞增排列,陣列中的元素互不相同。

以下為測試程式:

#include using namespace std;

//非遞迴實現

int binarysearch(int array, int len, int value)

return -1;

}//遞迴實現

int binarysearch_recursive(int array, int low, int high, int value)

int main(int argc, char *ar**)

cout << "input the search number:";

cin >> j;

int location = binarysearch(arr, 10, j);

if (location != -1)

cout << "exist1:" << location << endl;

else

cout << "not existed in array!" << endl;

location = binarysearch_recursive(arr, 0, 9, j);

if (location != -1)

cout << "exist2:" << location << endl;

else

cout << "not existed in array!" << endl;

system("pause");

return 0;

}//函式模板

templateint binarysearchrecursion(t data,t element,int start,int end)

int mid = (start+end)/2;

if(element == data[mid])

else if(element > data[mid])

else }

templateint binarysearchnotrecursion(t data,t element,int start,int end)

doelse if(element > data[mid])

else

}while(start<=end);

return -1;

}

分治演算法 入門簡單例項

求最大值和最小值,相信再簡單不過了,只要乙個迴圈遍歷,然後每次比較最大的和最小的值,然後遍歷完後就得到了最大值和最小值了。就是先排序,然後最大值和最小值就是頭尾了。這裡用分治法來求最大值和最小值了。如下 include stdio.h int aa void get max min int s,in...

演算法 分治演算法

分治策略主要利用遞迴來解決問題,它包括以下三個步驟 分解 將問題分解為一與原問題類似並且比原問題規模更小的子問題 解決 當分解的子問題足夠小時,直接給出答案,否則用遞迴打方式求解 合併 將子問題的解合成原問題的解 下面考慮乙個簡單的利用分治演算法的歸併排序的例子 問題的形式化描述如下 輸入 a是 乙...

演算法 分治演算法

leetcode 169.多數元素 應用舉例 通過應用舉例分析理解分治演算法的原理其實並不難,但是要想靈活應用並在程式設計中體現這種思想中 卻並不容易。所以,這裡這裡用分治演算法應用在排序的時候的乙個栗子,加深對分治演算法的理解。相關概念 一般通過計算有序對或者逆序對的個數,來表示資料的有序度或逆序...