中位數和順序統計

2022-02-11 04:42:39 字數 965 閱讀 2885

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 ...