主要是利用快排的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 為這個新順序。選擇排序的思想極其簡單,每一步都把乙個最小元素放到前面,如果有多個相等的最小元素,選擇排位較考前的放...