日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

中位数与顺序统计量

發(fā)布時間:2025/4/5 编程问答 25 豆豆
生活随笔 收集整理的這篇文章主要介紹了 中位数与顺序统计量 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

一:最小值和最大值

在有n個元素的集合中如果想找最小值,最優(yōu)也就是n-1次,但如果同時找最大值和最小值,最優(yōu)可以不是2(n-1)次而是3*(n/2)次,基本思路是成對的比較,先兩個數(shù)之間比較,較小值與最小值比較,較大值與最大值比較,注意奇數(shù)偶數(shù)要分開討論。

#include<iostream> #include<algorithm> using namespace std;int main() {int size;cin >> size;int *p = new int[size];for (int i = 0; i < size; i++)cin >> p[i];int MIN, MAX;if (size % 2 == 1)//奇偶要分開來討論,奇數(shù)直接將p[0]作為最大和最小值,后面成對比較{MIN = MAX = p[0];for (int i = 1; i < size; i += 2){int tempmin, tempmax;if (p[i] > p[i + 1]){tempmin = p[i + 1];tempmax = p[i];}else{tempmin = p[i];tempmax = p[i + 1];}MIN = min(tempmin, MIN);MAX = max(tempmax, MAX);}}else{MIN = min(p[0], p[1]);MAX = max(p[0], p[1]);for (int i = 2; i < size; i += 2){int tempmin, tempmax;if (p[i] > p[i + 1]){tempmin = p[i + 1];tempmax = p[i];}else{tempmin = p[i];tempmax = p[i + 1];}MIN = min(tempmin, MIN);MAX = max(tempmax, MAX);}}cout << "max=" << MAX << endl;cout << "min=" << MIN << endl;delete[] p;return 0; }

二:期望為線性時間的選擇算法

要從n個元素的集合中選出第i大的元素,基本思路是利用快排中的Partition函數(shù),這個函數(shù)調(diào)用后可以知道某一個數(shù)的大小在集合中具體的位置,這樣經(jīng)過二分就可以遞歸用線性時間得到第i大的元素。因為這里只要取其中一支遞歸,所以RandSelect的T(n)=O(1),總期望運行時間只有Partition的O(n)。
#include<iostream> #include<algorithm> using namespace std;int Partition(int a[], int p, int r); int RandSelect(int a[], int p, int r, int pos);int main() {int n,pos;cout << "Enter the length of array and the specific elements" << endl;cin >> n;int *a = new int[n+1];for (int i = 1; i <= n; i++)cin >> a[i];cout << "Enter the position of number you want to select" << endl;cin >> pos;int ans=RandSelect(a, 1, n, pos);cout << "the answer is " << ans << endl;delete[] a;return 0; }int RandSelect(int a[], int p, int r, int pos) {if (p == r)return a[p];int q = Partition(a, p, r);int k = q - p + 1;//已知的排第k的數(shù)if (pos == k)return a[q];else if (pos < k)return RandSelect(a, p, q - 1, pos);elsereturn RandSelect(a, q + 1, r, pos-k); } int Partition(int a[], int p, int r)//就是快排的分區(qū)函數(shù) {int x = a[r];int i = p - 1;for(int j=p;j<r;j++)if (a[j] <= x){i++;swap(a[i], a[j]);}swap(a[i + 1], a[r]);return i + 1; }

轉(zhuǎn)載于:https://www.cnblogs.com/seasonal/p/10343710.html

總結(jié)

以上是生活随笔為你收集整理的中位数与顺序统计量的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。