1. 陣列最大值和最小值問題
2.給定陣列a,查詢陣列中第i小的資料
1.1 給定乙個陣列a,如何求得陣列a中的最大元素和最小元素?最直接的演算法顯然就是通過遍歷陣列實現,那麼現在的問題是這個演算法是否是最優的呢?模擬比賽淘汰機制的話,可以看出上面的演算法在比較次數上是最優的。簡單的實現:
int maxelementinarray(int* arr, int length)
return max;
}1.2 下面乙個問題是上面問題的拓展,給定乙個陣列,如何通過最小的比較次數得該陣列的最大值和最小值?這裡有比較詳細的**實現。
2.1樸素的演算法,首先對陣列a進行排序,然後查詢第i小的元素。演算法實現比較簡單,略去。
2.2 上面的過程中。其中做了很多無用功,我們沒有必要對陣列進行排序,而僅僅需要找到第i小的元素,顯然演算法是存在優化的空間的。聯想快速排序演算法,通過分割的形式,將陣列a分割成兩部分,那麼pivot元素在陣列中的排序已經確定,顯然通過遞迴能夠比較快實現上面的演算法。
void swap(int* a, int* b)
// [start, end]閉區間
int quick_partition(int* arr,
int start,
int end)
j++;
}// 找到pivot位置
++i;
swap(&arr[i], &arr[end]);
return i;
}// index表示第i小的i
int my_random_select(int* arr, int start, int end,
int index)
int main()
;cout << my_random_select(arr, 0, 4, 5) << endl;
return 0;
}/files/xuqiang/algorithm/maxarrayelement.rar
中位數和順序統計
如何求取陣列中第i 小 大 的數,好像就是順序統計了,反正我是這麼理解的。有了順序統計,求取中位數就方便了。假設陣列有n個元素,如果n為奇數,則轉化為求取第 n 1 2小的元素 如果n為偶數,則轉化為求取第n 2小和第n 2 1小的元素,並取平均值得到。中位數的好處?好像是為了解決求平均值時的乙個弊...
中位數和順序統計學
1 最大值和最小值 對大小為n的陣列求最大值或最小值,僅需比較n 1次即可。minmum a,n min a 0 for i 1 iif a i min a i 對最大值也是如此。若同時取得最大值和最小值,按照上述方法,需比較2 n 1 次。事實上,至多3 2n次即可同時求得最大值和最小值。成對成對...
演算法導論 中位數和順序統計量
在乙個由n個元素組成的集合中,第i個順序統計量是該集合中第i小的元素。乙個中位數是它所屬集合的 中點元素 當n為奇數時,中位數是唯一的,位於i n 1 2處 當n為偶數時,存在兩個中位數,分別位於i n 2和i n 2 1處。如果不考慮n的奇偶性,中位數總是出現在i n 1 2 處 下中位數 和i ...