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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

利用快排查询无序数组第k位大的数

發布時間:2024/9/21 编程问答 36 豆豆
生活随笔 收集整理的這篇文章主要介紹了 利用快排查询无序数组第k位大的数 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

由于快速排序的partion函數返回值是基準值最終的位置,由此可以啟發得出當這個位置剛好是第k位時,直接輸出它下標對應的值,如果這個位置大于第k位時,則向該基準位置的左邊遞歸;如果這個位置小于第k位時,則向該基準位置的右邊遞歸;以上就是查找第k位的基本思想。

這個算法時間復雜度是o(n),這時候有的人會說快排的時間復雜度是o(nlogn),為什么這個是o(n)呢?因為快排分別是對基準值兩邊進行遞歸操作的,然后再合并,合并操作時間復雜度o(1),每趟進行了n次交換,整個快速排序進行了logn趟,所以快速排序的時間復雜度是o(nlogn);而這個查找問題,它只需要每次在一邊查找,確定樞紐元的相對位置(在K的左邊或者右邊)之后不用再對剩下的一半進行處理。也就是說第二次插入的算法復雜度不再是O(N)而是O(N/2),它的時間復雜度求解過程是1+1/2+1/4+........ < 2[1-(1/2)^n]<2,換句話說就是一共是O(2N)的算法復雜度也就是O(N)的算法復雜度。

源碼(python)

def partion(arr,left,right):front=leftrear=righttemp=arr[left]while(rear>front):while(rear>front) and(arr[rear]>temp):rear-=1arr[front]=arr[rear]while(rear>front) and(arr[front]<=temp):front+=1arr[rear]=arr[front]arr[front]=tempreturn frontdef main(arr,left,right,k):if(left==right): #當只有一個數時return arr[left]if(k-left+1>right): #當給出的k超過最大的數組時return -1t=partion(arr,left,right) #返回的是基準值在數組的位置,需要加1才等于第幾位if (t+1==k): #因為數組是從0開始,所以需要t+1才能與k值判斷return arr[t]elif(t+1>k): #當t+1大于k時,說明第k位在基準值的左邊return main(arr,left,t-1,k)else: #當t+1小于k時,說明第k位在基準值的右邊return main(arr,t+1,right,k)arr=[1,3,4,2,6,5,8,7,9,10] print(main(arr,0,9,6))

c語言源碼:

#include<stdio.h> int p; int t; void swap(int a[],int m,int n){int temp;temp=a[m];a[m]=a[n];a[n]=temp; } int partion(int a[],int left,int right){int k=left;int s=a[k]; //將中間的這個數和第一個數交換 while(left<right){while(left<right&&a[right]>s){ // 從右向左找第一個小于x的數 right--;}swap(a,right,left);while(left<right&&a[left]<=s){ // 從左向右找第一個大于等于x的數 left++;}swap(a,left,right);}a[left]=s; //一趟劃分結束,left為軸心return left; } int quick_find(int a[],int left,int right,int k){if(k<0 && k-left+1>right){return -1;}if(left==right) return a[left];int t=partion(a,left,right);if(t+1==k) return a[t]; //基準值的位置剛好是第k位else if(t+1>k) //向基準值左邊遞歸查找return quick_find(a,left,t-1,k);else //向基準值右邊遞歸查找return quick_find(a,t+1,right,k); }int main(){int a[]={1,2,5,7,4,3,10,6,9,8};int u=9;int k=5;printf("%d\n",quick_find(a,0,u,k));return 0; }

?

總結

以上是生活随笔為你收集整理的利用快排查询无序数组第k位大的数的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 激情片网站 | 午夜免费视频 | 日韩中文一区二区三区 | 欧美第二区 | 秋霞午夜鲁丝一区二区 | 国产调教 | 欧美在线看片 | 日韩成人在线视频观看 | caoprom超碰 | 亚洲天堂一区二区 | 国产真实乱在线更新 | 久久国产加勒比精品无码 | 久草三级| 亚欧洲精品在线视频免费观看 | 午夜视频在线观看一区二区 | 天天舔天天舔 | 能免费看18视频网站 | 日本做爰三级床戏 | 在线免费观看毛片 | 五月婷婷一区二区 | 日韩欧美aⅴ综合网站发布 国产成人一区二区三区小说 | 丰满人妻av一区二区三区 | 青青操视频在线播放 | 人妻精品一区二区三区 | 欧美亚洲视频一区 | 免费黄色网址在线观看 | 欧洲熟妇精品视频 | 少妇免费视频 | 亚洲欧美另类日韩 | 亚洲av色香蕉一区二区三区 | 香蕉成人网| 成年人网站在线免费观看 | 日本精品一区在线 | 国产黄色片在线观看 | 可以免费看污视频的网站 | 西西人体44www大胆无码 | 亚洲三级在线 | 色综合av在线 | 在线天堂一区 | 日日摸日日碰夜夜爽无码 | 特级黄毛片 | 亚洲不卡网 | 菠萝菠萝蜜网站 | 精品久久久久久国产 | 日韩精品在线不卡 | 在线观看成人小视频 | 久久久久久一区 | 中日韩精品视频在线观看 | 无码人妻一区二区三区线 | 亚州男人的天堂 | 日本免费不卡 | 激情内射人妻1区2区3区 | 亚洲天天 | av在线影片| 中国在线观看免费视频 | 玉女心经是什么意思 | 三上悠亚痴汉电车 | 欧美www.| 亚洲国产精品毛片av不卡在线 | 日韩一级免费片 | 纯爱无遮挡h肉动漫在线播放 | 亚洲狼人社区 | 高清国产一区 | 欧美黄色一级视频 | 高h视频在线播放 | 五月天婷婷综合网 | 在线观看亚洲成人 | 蜜桃视频中文字幕 | 波多野结衣一二区 | 麻豆做爰免费观看 | 杨幂毛片午夜性生毛片 | 欧美xxxx在线 | 三上悠亚久久 | 国产在线专区 | 午夜精品少妇 | 日本午夜啪啪 | 日韩毛片网 | 亚洲品质自拍视频网站 | 日韩精品在线观看网站 | 99久久综合网| 黄色在线免费 | 成人动漫av在线 | 欧美做爰xxxⅹ性欧美大片 | 九九热在线视频免费观看 | 久久香蕉精品 | 香蕉蜜桃视频 | 欧美日韩精品在线视频 | 日韩大片一区 | 国产91国语对白在线 | 黄色大片在线免费观看 | 一区二区手机在线 | 国产啊啊啊啊 | 做爰无遮挡三级 | 国产精品毛片久久 | 中文字幕在线视频网站 | 欧美日日日 | 男女做受视频 | 日韩视频在线观看一区二区三区 | 亚洲欧洲免费视频 |