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

歡迎訪問(wèn) 生活随笔!

生活随笔

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

编程问答

随机查找数组中第i个元素(按顺序排列的)

發(fā)布時(shí)間:2025/4/16 编程问答 37 豆豆
生活随笔 收集整理的這篇文章主要介紹了 随机查找数组中第i个元素(按顺序排列的) 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

在一個(gè)無(wú)序的序列中,要查找第i小的元素最簡(jiǎn)單的方法就是將所有元素排序,就可以直接找到地i小的元素,然而比較排序算法最快也只能是O(nlogn),比如堆排序、歸并排序、快速排序。這里研究了只要時(shí)間復(fù)雜度為O(n)的算法。

?????? 利用快速排序算法中的樞軸元素,即樞軸元素的左邊全是小于等于它的元素,樞軸元素的右邊全是大于等于它的元素,則樞軸元素的位置k就是它在序列中第k小的元素,然后用k和要查找的i比較判斷即可。這里用到了分治算法,每次遞歸調(diào)用都可以排除掉部分元素:樞軸元素的全部左部分元素或樞軸元素的全部右部分元素

主要思想:

1、假設(shè)n=1時(shí),就是只有一個(gè)數(shù),

直接返回這個(gè)位置的值就是所求的第i個(gè)值

<span style="font-size:18px;">int RandomSelect(int *pnArr, int nLeft, int nRight, int i) {if (nLeft == nRight){return pnArr[nLeft];}//尋找一個(gè)nTmpPos下標(biāo),nTmpPos左邊的值都小于它,右邊的值都大于它int nTmpPos = RandomPartiton(pnArr, nLeft, nRight);int nLCount = nTmpPos - nLeft + 1;if (nLCount == i){return pnArr[nTmpPos];}else if (i < nLCount){return RandomSelect(pnArr, nLeft, nTmpPos - 1, i);}else{return RandomSelect(pnArr, nTmpPos + 1, nRight, i - nLCount);} }</span> 2、當(dāng)數(shù)組的個(gè)數(shù)大于2時(shí),運(yùn)用快速排序的思想,尋找一個(gè)主元的地址,

如果主元在的位置正好是所求的第i個(gè)數(shù),則返回值

<span style="font-size:18px;">//尋找一個(gè)nTmpPos下標(biāo),nTmpPos左邊的值都小于它,右邊的值都大于它int nTmpPos = RandomPartiton(pnArr, nLeft, nRight);</span> </pre><pre name="code" class="html">
</pre><p><span style="font-size:18px;">如果i小于所求的主元地址,則在數(shù)組的前半部分求第i個(gè)數(shù),主要運(yùn)用遞歸的思想, 第i個(gè)數(shù)也是在前半部分?jǐn)?shù)組的第i個(gè)位置,所以遞歸時(shí)所查找的位置還是i</span></p><pre name="code" class="html" style="line-height: 24px;"><span style="font-size:18px;"> else if (i < nLCount){return RandomSelect(pnArr, nLeft, nTmpPos - 1, i);}</span> <span style="font-size:18px;"> </span> <span style="font-size:18px;">如果第i個(gè)元素的地址大于主元地址</span> <pre name="code" class="html"><span style="font-size:18px;"> {return RandomSelect(pnArr, nTmpPos + 1, nRight, i - nLCount);}</span> <span style="font-size:18px;">所查找的地址在數(shù)組的后半段,所在的地址是<span style="font-family: Arial, Helvetica, sans-serif;">i - nLCount的位置</span></span> <span style="font-family: Arial, Helvetica, sans-serif;"><span style="font-size:18px;"> </span></span> <span style="font-family:Arial, Helvetica, sans-serif;font-size:18px;">代碼:</span> <span style="font-family:Arial, Helvetica, sans-serif;"></span><pre name="code" class="html"><span style="font-size:18px;">#include <stdio.h> #include <stdlib.h> #include <malloc.h> #include <time.h>void PrintArr(int *pnArr, int nLen) {for (int i = 0; i < nLen; i++){printf("%d ", pnArr[i]);}printf("\n"); }void Swap(int *p1, int *p2) {int nTmp = *p1;*p1 = *p2;*p2 = nTmp; }int Partition(int *pnArr, int nLeft, int nRight) {int nKey = nRight;int i = nLeft - 1;for (int j = nLeft; j < nRight; j++){if (pnArr[j] <= pnArr[nKey]){i++;Swap(&pnArr[i], &pnArr[j]);}}Swap(&pnArr[i+1], &pnArr[nKey]);return i+1; }int RandomPartiton(int *pnArr, int nLeft, int nRight) {srand(time(NULL));int i = rand()%(nRight - nLeft + 1) + nLeft;Swap(&pnArr[i], &pnArr[nRight]);return Partition(pnArr, nLeft, nRight); } //i 第i小元素 int RandomSelect(int *pnArr, int nLeft, int nRight, int i) {if (nLeft == nRight){return pnArr[nLeft];}//尋找一個(gè)nTmpPos下標(biāo),nTmpPos左邊的值都小于它,右邊的值都大于它int nTmpPos = RandomPartiton(pnArr, nLeft, nRight);int nLCount = nTmpPos - nLeft + 1;if (nLCount == i){return pnArr[nTmpPos];}else if (i < nLCount){return RandomSelect(pnArr, nLeft, nTmpPos - 1, i);}else{return RandomSelect(pnArr, nTmpPos + 1, nRight, i - nLCount);} }int main() {int nArr[10] = {0,2,1,3,5,6,9,7,4,12}; PrintArr(nArr, 10);printf("第5最小元素的值為%d\n", RandomSelect(nArr, 0, 9, 5));system("pause");return 0; }</span>

總結(jié)

以上是生活随笔為你收集整理的随机查找数组中第i个元素(按顺序排列的)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

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

主站蜘蛛池模板: 午夜一区二区三区四区 | 欧美性猛交xxxx免费看久久久 | 国产黄色片av | 贝利弗山的秘密在线观看 | 日韩性生活大片 | 色999视频 | 超碰在线98| 亚洲风情第一页 | 一起操在线观看 | 国内一区二区 | 狂野欧美性猛交xxⅹ李丽珍 | 久久亚洲第一 | 国产乱淫av片免费看 | 国产香蕉一区二区三区 | 99色播 | 久久无毛 | 欧美福利网站 | 久久人妻少妇嫩草av无码专区 | 96看片 | 国产一级内谢 | 美女赤身免费网站 | gav成人| 免费网站看av| 午夜在线一区二区 | 色网视频 | 不卡的免费av | 久久午夜影视 | 亚洲欧洲国产日韩 | 五月婷婷在线播放 | 欧美日韩另类在线 | 国产女主播喷水高潮网红在线 | 欧美黄色a视频 | 日韩无遮挡| 国精产品一区一区三区mba下载 | 99久 | 欧美日韩中文字幕一区 | 中文字幕第11页 | 看黄色的网址 | 黄色三级网站在线观看 | 波多野结衣av无码 | 茄子视频A | 美女扒开尿口让男人捅爽 | 日韩素人| 日美毛片 | av在线电影网站 | 国产麻豆网 | 国产极品在线播放 | 成年人三级网站 | 少妇搡bbbb搡bbb搡打电话 | 高h放荡受浪受bl | 成人中文视频 | 99在线精品视频免费观看20 | 大胸美女无遮挡 | 精品999久久久一级毛片 | 97超级碰碰 | 91精品国产高清一区二区三蜜臀 | 日本女教师电影 | 国产夜夜操 | 国产免费av片在线 | av不卡在线看 | 精品国产欧美一区二区三区成人 | 亚洲精品www | 无码精品视频一区二区三区 | 日韩不卡在线播放 | 国产精品久久久久久久久久辛辛 | 亚洲欧美一区二区三区 | 先锋影音av资源在线 | 天天色宗合 | jul023被夫上司连续侵犯 | 色婷婷av一区 | 亚洲免费成人网 | 扒开腿揉捏花蒂h | 久久精品视频1 | 亚洲欧美日韩国产综合 | 久操视频在线观看 | av小说区| 久久久久免费观看 | 亚洲伊人影院 | 国产精品videossex久久发布 | 亚洲综合图片一区 | 日韩精品视频在线免费观看 | 国产国语对白 | 亚洲国产三区 | 国产精品伦一区二区三区 | 久久狠狠爱| 欧美zozo| 国产精品国产三级国产在线观看 | 黄色大片中文字幕 | 久久国产乱子伦免费精品 | 日韩视频在线观看一区二区三区 | 日韩毛片一区 | 欧美激情在线播放 | 日韩电影一区二区三区 | 中文字幕一区二区三区在线视频 | 欧美天堂视频 | 欧美一区二区三区四区视频 | 美女黄页在线观看 | 日本在线网址 | 色阁av |