亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > C > 正文

數組中求第K大數的實現方法

2020-01-26 16:08:56
字體:
來源:轉載
供稿:網友
問題:有一個大小為n的數組A[0,1,2,…,n-1],求其中第k大的數。
該問題是一個經典的問題,在《算法導論》中被作為單獨的一節提出,而且其解決方法很好的利用了分治的思想,將時間復雜度控制在了O(n),這多少出乎我們的意料,此處暫且不表。
該問題還可以變形為:有一個大小為 n的數組A[0,1,2,…,n-1],求其中前k大的數。
一字之差,原問題是“第k大”,變形的問題是“前k大”,但是平均時間復雜度卻都可以控制在O(n),這不由得讓人暗暗稱奇。

我們先分析原問題:有一個大小為 n的數組A[0,1,2,…,n-1],求其中第k大的數。
我們先取特例,令k=1,那么就是取最大的數,只要掃描一遍數組就可以確定該值,如果k=2,則掃描兩邊數組就可以確定第二大的數,依此類推下去,時間復雜度是O(k*n),如果k跟n是一個數量級,那么時間復雜度就是O(n*n)了,顯然不是最優的解法。

考慮分治法,難點在于如何將該問題分解為兩個子問題。
快速排序最基礎的一步:
隨機取某一個數x,將其與數組末尾元素交換,然后將比其小的數交換至前,比其大的數交換至后。
這一步使某一數組的快速排序問題分解成兩個子數組的排序問題,現在我們就依此來解決取第k大的數這個問題。
設數組下表從0開始,至n-1結束。
1、 隨機取某個數,將其與數組末尾元素交換。
a)        idx=rand(0,n-1);生成[0,n-1]間的隨機數。
b)        Swap(array[idx], array[n-1]);
2、 用末尾元素x,將比x小的數交換至前,比x大的數交換至后,并返回此時x在數組中的位置mid。
3、 如果mid==n-k,那么返回該值,這就是第k大的數。
如果mid>n-k,那么第k大的數在左半數組,且在左半數組中是第k-(n-mid)大的數。
如果mid<n-k,那么第k大的數在右半數組,而且仍然是第k的數。
復制代碼 代碼如下:

#include "iostream"
using namespace std;
int random_partion(int *p, int n)
{
     int idx=rand()%n;
     swap(p[idx], p[n-1]);
     int i=-1;    //i表示最后一個小于p[n-1]的元素的位置
     int j=0;     //j用來掃描數組
     for(j=0; j<n; j++)
     {
            //將小于p[n-1]的數交換到前半部分
            if(p[j]<p[n-1])
            {
    swap(p[++i], p[j]);
            }
     }
     swap(p[++i], p[n-1]);
     return i;
}
int getMaxK(int *p, int n, int k)
{
 int mid;
     if(k<=0)
            return -1;
     if(n<k)
            return -1;
  mid=random_partion(p, n);   //對原數組進行一次劃分
     if(mid == n-k)      //如果mid==n-k,那么返回該值,這就是第k大的數
   return p[mid];
     else if(mid<n-k)
   return getMaxK(p+mid+1, n-mid-1, k);  //如果mid<n-k,那么第k大的數在右半數組,而且仍然是第k大數
     else
   return getMaxK(p, mid, k-(n-mid));   //如果mid>n-k,那么第k大的數在左半數組,且在左半數組中是第k-(n-mid)大的數
}
int main(void)
{
 int num,a[] = {12012, 3, 945, 965, 66, 232, 65, 7, 8, 898, 56, 878, 170, 13, 5};
 num=getMaxK(a, 15, 4);
 printf("%d/n",num);
 system("pause");
 return 0;
}

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表

圖片精選

亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
在线视频中文亚洲| 国产精品久久精品| 久久亚洲国产成人| 欧美激情一区二区三级高清视频| 精品国产精品自拍| 国产精品中文字幕在线观看| 国产69精品久久久久久| 欧美中文字幕在线播放| 激情亚洲一区二区三区四区| 性色av一区二区三区在线观看| 97视频在线看| 久久精品视频亚洲| 国产中文欧美精品| 欧美专区在线播放| 日本精品免费一区二区三区| 欧美成人全部免费| 一本久久综合亚洲鲁鲁| 91在线无精精品一区二区| 国产精品精品视频| 亚洲国内高清视频| 亚洲色图色老头| 久久久久久久影视| 欧美天堂在线观看| 91香蕉嫩草神马影院在线观看| 亚洲综合视频1区| 日韩中文娱乐网| 免费99精品国产自在在线| 精品国产一区二区三区久久狼黑人| 日韩精品视频免费在线观看| 麻豆国产精品va在线观看不卡| 97香蕉久久夜色精品国产| 欧美日韩中文字幕| 国产精品女人久久久久久| 欧美国产日韩在线| 亚洲电影第1页| 国内精品久久久久久久久| 国内揄拍国内精品| 亚洲黄在线观看| 日韩精品中文字| 九九精品在线播放| 日本三级韩国三级久久| 久久精品在线视频| 欧美电影在线免费观看网站| 国产97在线亚洲| 久久久久久久久久久av| 91色视频在线观看| 亚洲香蕉av在线一区二区三区| 欧美午夜久久久| 精品国产欧美一区二区五十路| 国产精品伦子伦免费视频| 日韩精品视频在线观看免费| 久热在线中文字幕色999舞| 国产精品美女免费看| 中文字幕av一区中文字幕天堂| 97在线看免费观看视频在线观看| 精品毛片三在线观看| 欧美在线观看视频| 岛国视频午夜一区免费在线观看| 国产v综合ⅴ日韩v欧美大片| 久久久久久久久久久亚洲| 日韩欧美一区二区三区| 亚洲丁香婷深爱综合| 一个人看的www久久| 视频直播国产精品| 97在线视频观看| 在线免费观看羞羞视频一区二区| 国产成人精品视频在线观看| 亚洲欧美日韩爽爽影院| 成人黄色片网站| 亚洲视频精品在线| 国产在线观看一区二区三区| 国产欧美在线观看| 91在线视频精品| 久久久精品国产| 欧美视频一区二区三区…| 国产成人亚洲综合91| 欧美日韩国产一区中文午夜| 最新亚洲国产精品| 国产精品成人免费电影| 伊人亚洲福利一区二区三区| 亚洲老头老太hd| 国产一区二区三区久久精品| 日韩精品在线影院| 欧洲成人在线视频| 国产精品欧美一区二区三区奶水| 久久久精品久久久| 亚洲激情视频网站| 另类天堂视频在线观看| 成人激情视频小说免费下载| 欧美成人午夜激情| 国产精品一区二区三区成人| 国产欧美日韩中文字幕在线| 精品动漫一区二区| 7m精品福利视频导航| 国产精品视频公开费视频| 国产精品高清网站| 亚洲色图18p| 欧美黑人性猛交| 韩剧1988免费观看全集| 日韩欧美中文字幕在线观看| 91精品国产91久久久久久吃药| 久久精品99无色码中文字幕| 日本精品一区二区三区在线播放视频| 2019亚洲日韩新视频| 欧美日韩国产91| 国产精品毛片a∨一区二区三区|国| 色综合五月天导航| 亚洲精品免费网站| 最近更新的2019中文字幕| 亚洲视频免费一区| 91精品国产自产在线老师啪| 欧美日韩国产成人在线观看| 国产精选久久久久久| 久久久精品国产一区二区| 国产亚洲欧美另类中文| 国产成人精品久久亚洲高清不卡| 国产精品一区二区三区在线播放| 日韩中文在线观看| 亚洲电影免费观看高清完整版在线| …久久精品99久久香蕉国产| 亚洲影视九九影院在线观看| 日韩av在线影院| 国产精品流白浆视频| 日韩一区二区久久久| 不卡av电影院| 欧美中文字幕视频| 欧美激情视频三区| 久久精品99久久久香蕉| 日韩美女在线观看一区| 久久精品成人欧美大片| 欧美成年人视频网站| 国产不卡视频在线| 日韩在线资源网| 91超碰中文字幕久久精品| 国产视频一区在线| 国产精品黄页免费高清在线观看| 成人激情在线观看| 日韩欧美国产骚| 国产精品视频最多的网站| 欧美亚洲视频一区二区| 国产精品99蜜臀久久不卡二区| 亚洲欧美激情另类校园| 57pao成人永久免费视频| 亚洲黄色在线观看| 日韩视频欧美视频| 欧美成人一区在线| 欧美最猛性xxxxx(亚洲精品)| 97在线视频一区| 草民午夜欧美限制a级福利片| 亚洲香蕉在线观看| 欧美精品在线免费播放| 成人久久久久久久| 最近2019年手机中文字幕| 91情侣偷在线精品国产| 亚洲天堂2020| 亚洲一区二区黄| 国产精品海角社区在线观看| 亚洲女成人图区| 欧美一区二区大胆人体摄影专业网站| 亚洲欧美成人一区二区在线电影| 国产精品aaa| 国产日韩中文在线| 国产精品户外野外| 自拍亚洲一区欧美另类|