線性選擇演算法的遞迴實現和迴圈實現

2022-07-19 16:09:27 字數 785 閱讀 8896

主要是利用快排的randomized_parttition()函式返回乙個第q小的數,且第q小的數的座標是絕對座標而不是相對座標,比如輸入座標範圍為[p,r]的陣列,第q小的數會返回p+q-1的座標。

#include "stdafx.h"

#include#include #include using namespace std;

#define sb -1

int random(int p, int r)

int partition(int a, int p, int r)

if (a[j] == x)

}int tii;

tii = a[i + t + 1];

a[i + 1 + t] = a[r];

a[r] = tii;

return i + 1;

}int random_partion(int a, int p, int r)

/*int random_select(int a, int p, int r, int i) //隨機選擇演算法遞迴實現

*/int random_select2(int a, int p, int r, int i) //隨機選擇演算法迴圈實現

else

} return a[q];

}int main()

; //sb為哨兵,不包括在選擇項

cout << random_select2(a, 1, 12, 7);

while (1);

return 0;

}

數列求和的線性遞迴實現和二分遞迴實現

標籤 空格分隔 資料結構 演算法 以前上c程式設計時,遞迴就搞得糊里糊塗的,甚至連最簡單的乙個青蛙跳問題都做不出來。過了幾個月了,因為學習資料結構重新學習了一下,歸納了一下如何寫出乙個遞迴程式。遞迴分為好幾種模式,這裡先介紹線性遞迴和二分遞迴。以對乙個整型數列求和為例。先上 假設最常用的設加和器迴圈...

歸併演算法的遞迴和非遞迴實現

package sort public class mergesort int workspace new int sourcedata.length mergesort ms new mergesort ms.mergesort sourcedata,workspace,0,workspace.l...

選擇排序 (C ) 排序演算法 (遞迴實現)

排序,顧名思義,是將若干個元素按其大小關係排出乙個順序。形式化描述如下 有n個元素a 1 a 2 a n 從小到大排序就是將它們排成乙個新順序a i 1 a i 2 a i n i k 為這個新順序。選擇排序的思想極其簡單,每一步都把乙個最小元素放到前面,如果有多個相等的最小元素,選擇排位較考前的放...