多多色-多人伦交性欧美在线观看-多人伦精品一区二区三区视频-多色视频-免费黄色视屏网站-免费黄色在线

國內最全IT社區平臺 聯系我們 | 收藏本站
阿里云優惠2
您當前位置:首頁 > 互聯網 > 【基礎算法】排序-復雜排序之二(找出第K大的數)

【基礎算法】排序-復雜排序之二(找出第K大的數)

來源:程序員人生   發布時間:2014-11-05 08:54:57 閱讀次數:2706次

分割的思想是快速排序最精華的地方。每次分割出來的元素K1個排在第K位,所以利用這類思想我們最少知道3點

1. 被分割出來的元素K最后1定排在第K位。

2. 在K左側的元素1定比K小或相等。

3. 在K右側的元素1定比K大或相等。

所以我們可以通過這些性質定位到任意1個元素。

比如我們partition完1個數組后,得到A={5,3,4,2,6,8,10,12,11,9}

A[K]=8,所以我們知道排好序后的A[5]=8, A[4]1定在8左側,A[6]1定在8右側

所以,我們1定知道8這個數是數組里第5+1小的數,第10⑸大的數

所以我們得出 如果分割出來的數A[K]=X, 那末X1定是數組里的第K+1位,也就是第K+1小的數

如果數組的長度為N,那末X就是數組里第N-K大的數

下面是分割的代碼

public static int partition(int[] array, int left, int right) { int i = left; int j = right + 1; while (true) { while (more(array[left], array[++i])) if (i == right) break; while (more(array[--j], array[left])) if (j == left) break; if (i >= j) break; exchange(array, i, j); } exchange(array, left, j); return j; }

接下來就是如何在分割后定位其他的元素了?

如果我們定位了A[K]=X,發現目標元素O比X大,那末就在右側找,left=K+1,如果比X小,那末就在左側找,right=K⑴,否則定位成功

public static int select(int[] array, int k) { int left = 0; int right = array.length - 1; while (left < right) { int j = partition(array, left, right); if (j < k) left = j + 1; else if (j > k) right = j - 1; else return array[k]; } return array[k]; }

下面給出完全代碼,僅供大家參考

// compare public static boolean more(int v, int w) { return v > w; } // exchange public static void exchange(int[] array, int i, int j) { int temp = array[i]; array[i] = array[j]; array[j] = temp; } public static int partition(int[] array, int left, int right) { int i = left; int j = right + 1; while (true) { while (more(array[left], array[++i])) if (i == right) break; while (more(array[--j], array[left])) if (j == left) break; if (i >= j) break; exchange(array, i, j); } exchange(array, left, j); return j; } public static int select(int[] array, int k) { int left = 0; int right = array.length - 1; while (left < right) { int j = partition(array, left, right); if (j < k) left = j + 1; else if (j > k) right = j - 1; else return array[k]; } return array[k]; }



生活不易,碼農辛苦
如果您覺得本網站對您的學習有所幫助,可以手機掃描二維碼進行捐贈
程序員人生
------分隔線----------------------------
分享到:
------分隔線----------------------------
關閉
程序員人生
主站蜘蛛池模板: 国产片免费看 | 男女做爽爽免费视频 | 交在线观看网站视频 | 欧美xxxx做受欧美gay | 国产亚洲福利 | 波多野结衣久久精品 | a∨79成人网 | 波多野结衣在线不卡 | 一级a欧美毛片 | www干| 亚洲国产成人久久一区www | 国产精品久久久久久影视 | 草β好视频 | 午夜在线 | 成人免费视频视频在线不卡 | 亚洲欧美一 | 精品国产国产综合精品 | 精品久久久久久国产 | 国产成人毛片亚洲精品不卡 | 欧美性一区二区三区五区 | 一区二区中文字幕在线观看 | 亚洲视频 在线观看 | 夜趣第一宅男福社区国产 | 麻豆精选传媒4区2021 | 国产一区二区免费视频 | 另类图片另类小说 | 91av在线免费观看 | 国产日比视频 | 国产尤物视频 | 老黄网站在线观看免费 | japan高清日本乱xxxx | 国产毛片久久国产 | 国产成人啪午夜精品网站男同 | 国产三级在线观看专区 | 99久久这里只精品麻豆 | 日韩在线手机看片免费看 | 欧美专区一区 | 亚洲美女视频 | 亚州不卡 | 另类五月 | 亚洲伊人久久大香线蕉苏妲己 |