藍橋杯——快速排序(2018JavaB組第5題9分)

快速排序(18JavaB5,9’)

以下代碼可以從數組a[]中找出第k小的元素。

它使用了類似快速排序中的分治算法,期望時間復雜度是O(N)的。

請仔細閱讀分析源碼,填寫劃線部分缺失的內容。

import java.util.Random;
public class Main{public static int quickSelect(int a[], int l, int r, int k) {Random rand = new Random();int p = rand.nextInt(r - l + 1) + l;int x = a[p];int tmp = a[p]; a[p] = a[r]; a[r] = tmp;int i = l, j = r;while(i < j) {while(i < j && a[i] < x) i++;if(i < j) {a[j] = a[i];j--;}while(i < j && a[j] > x) j--;if(i < j) {a[i] = a[j];i++;}}a[i] = x;p = i;if(i - l + 1 == k) return a[i];if(i - l + 1 < k) return quickSelect( _________________________________ ); //填空else return quickSelect(a, l, i - 1, k);    }public static void main(String args[]) {int [] a = {1, 4, 2, 8, 5, 7};System.out.println(quickSelect(a, 0, 5, 4));}
}

注意:只提交劃線部分缺少的代碼,不要抄寫任何已經存在的代碼或符號。


先看看典型的快速排序

快速排序

快速排序是C.R.A.Hoare于1962年提出的一種劃分交換排序

它采用了一種分治(Divide-and-ConquerMethod)的策略

基本思想

1.先從數列中取出一個數作為基準數。

2.分區過程,將比這個數大的數全放到它的右邊,小于或等于它的數全放到它的左邊。

3.再對左右區間重復第二步,直到各區間只有一個數。

1648799-20190715193629487-721157451.png

先把基準值(最左)存起來

高位(右)大的往左邊拉

低位(左)小的往右邊拉

最后,存的那個基準值(曾經最左)放中間

對左:相同處理

對右:相同處理

package bb;
public class QuickSortMy {static void printArray(int a[]) {for (int i : a) {System.out.print(i + "\t");}System.out.println();}static void qsort(int a[], int left, int right) {if (left >= right) {return;}printArray(a);int key = a[left];int i = left, j = right;while (i < j) {while (i < j && a[j] > key) {j--;}if (i < j) {System.out.printf("a[%d]=%d <- a[%d]=%d\n", i, a[i], j, a[j]);a[i++] = a[j];}while (i < j && a[i] < key) {i++;}if (i < j) {System.out.printf("a[%d]=%d -> a[%d]=%d\n", i, a[i], j, a[j]);a[j--] = a[i];}}a[i] = key;printArray(a);qsort(a, left, i - 1);qsort(a, i + 1, right);}public static void main(String[] args) {int a[] = { 3, 4, 5, 1, 2 };qsort(a, 0, a.length - 1);}
}

2018JavaB組第5題的參考答案+注釋如下所示:

package bb;
import java.util.Random;
public class JB18_5快速排序 {public static int quickSelect(int a[], int l, int r, int k) {Random rand = new Random();int p = rand.nextInt(r - l + 1) + l;int x = a[p];int tmp = a[p];a[p] = a[r];a[r] = tmp;int i = l, j = r;while (i < j) {while (i < j && a[i] < x)i++;if (i < j) {a[j] = a[i];j--;}while (i < j && a[j] > x)j--;if (i < j) {a[i] = a[j];i++;}}a[i] = x;p = i;if (i - l + 1 == k)// (1)說明到底了return a[i];if (i - l + 1 < k)return quickSelect(a, i + 1, r, k - i + l - 1); // 填空// qsort(a, i + 1, right);// (3)先試試k,// (4)再考慮:k要移動到等于(i - l + 1),試試k-(i - l + 1)else// i - l + 1 > kreturn quickSelect(a, l, i - 1, k);// (2)qsort(a, left, i -// 1);對上了,k不變}public static void main(String args[]) {int[] a = { 1, 4, 2, 8, 5, 7 };System.out.println(quickSelect(a, 0, 5, 4));// int [] a = {1, 4, 2, 8, 5, 7, 23, 58, 16, 27, 55, 13, 26, 24, 12, 2};// System.out.println(quickSelect(a, 0, a.length-1, 6));}
}

轉載于:https://www.cnblogs.com/tigerlion/p/11190958.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/277220.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/277220.shtml
英文地址,請注明出處:http://en.pswp.cn/news/277220.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

關于蝴蝶背景

Runner 2006-07-04 這些鏈接都比較久遠了&#xff0c;現在大概都失效了。好像有不少人都是這兩只可愛的蝴蝶帶來的&#xff0c;看來這兩只蝴蝶真是我的福星啊。這里再把Flash背景的用法貼出來吧.如果直接點擊鏈接無法顯示頁面&#xff0c;可以把鏈接地址復制到瀏覽器的地址欄里…

html 文本橫豎切換,(橫豎屏切換/強制橫屏)CSS3 transform 怎樣才能中心旋轉?

現在有一個canvas&#xff0c;我希望在(手機和平板)豎屏時能夠把它以中心作為旋轉原點旋轉90(強制橫屏)&#xff0c;但用了transform-origin&#xff0c;無論怎樣設置數值都不能達到目的&#xff0c;是我哪里搞錯了嗎&#xff1f;附CSS代碼&#xff1a;html, body{width: 100%;…

Echarts多任務可視化之再優化

1.上次進程可視化由svg實現&#xff0c;本次改用echarts框架實現。Js文件&#xff1a;loadxmldoc.js&#xff08;用于加載xml文檔&#xff09;echarts.js&#xff08;用來實現有向圖繪制&#xff09;2.思路&#xff1a;Echarts是定義數據對象數組data和連接對象數組links&#…

約 定

十天&#xff0c; 不能見面 &#xff0c;不能打電話或發短信 .這是我和她的約定.十天&#xff0c;要讓一個深愛著她的男人去尊照這樣的約定去做&#xff0c;實在是難以接受。雖然心里有一萬個不愿意&#xff0c;但我知道 &#xff0c;我心里早以做出了選擇.選擇了我愛的&#x…

NIKE LEBRON 13 PERFORMANCE REVIEW

LeBron James signed a lifetime deal with Nike, cementing his already stable position as Nike’s current top endorser. That means it’s no surprise that Nike would use a person in such a position to help lead new innovative technology. But at times, Nike is…

我的專業我的夢作文計算機,我的創新我的夢作文

新時代&#xff0c;新變化。現在二十一世紀&#xff0c;人們都過上了幸福的生活&#xff0c;發明出來的日常用品&#xff0c;電子產品等等&#xff0c;都是根據人們創新的精神建造出來的。現在我們通過了學習&#xff0c;也漸漸體會到了創新的重要性。就像是在動畫片中&#xf…

Ubuntu掛載新硬盤

1、加掛硬盤 Shell代碼 復制代碼sudo hdparm -I /dev/sdb 硬盤硬件安裝后&#xff0c;此命令測試linux系統是否能找到掛載的未分區硬盤 2、創建分區 Shell代碼 復制代碼sudo fdisk /dev/sdb sda是第一塊SCSI硬盤&#xff0c;sdb第二塊&#xff0c;以此類推...物理分區使用a、b…

利用XML實現通用WEB報表打印 盧彥

利用XML實現通用WEB報表打印(1) 盧彥 摘要開發B/S結構的應用程序最頭疼的問題可能就是報表打印了&#xff0c;由于只能采用瀏覽器來作為用戶界面進行交互&#xff0c;所以不能精確控制客戶端的打印機。而很多B/S結構的應用程序常常需要完成非常復雜的報表打印任務。而靠IE自帶的…

增加新分類daily——“每天學了啥?”

如題轉載于:https://www.cnblogs.com/sig3/p/3926538.html

現代計算機密碼學階段主要有兩個方向,密碼學技術讀書筆記

關于密碼學技術讀書筆記一.密碼學的介紹密碼學(在西歐語文中&#xff0c;源于希臘語krypts“隱藏的”&#xff0c;和grphein“書寫”)是研究如何隱密地傳遞信息的學科。在現代特別指對信息以及其傳輸的數學性研究&#xff0c;常被認為是數學和計算機科學的分支&#xff0c;和信…

cascade rcnn論文總結

1.bouding box regression總結&#xff1a; rcnn使用l2-loss 首先明確l2-loss的計算規則&#xff1a; L?(f?(P)?G?)2&#xff0c;?代表x,y,w,h 整個loss : LLxLyLwLh 也就是說&#xff0c;按照l2-loss的公式分別計算x,y,w,h的loss&#xff0c;然后把4個loss相加就得到總的…

淺談優化SQLServer數據庫服務器內存配置的策略

引文 http://demo.nbarticle.com/view/2004/8/9/view_1827.htm 農業銀行總行1998年以來正式推廣了新版網絡版綜合業務統計信息系統&#xff0c;該系統是基于WindowsNT4.0平臺&#xff0c;采用客戶&#xff0f;服務器模式&#xff0c;以Microsoft SQL Server為基礎建立起來的大…

知道第一章計算機基礎知識作業答案,大學計算機基礎作業答案

大學計算機基礎作業答案第一章 現代社會與計算機1. 什么事信息&#xff0c;其主要特征是什么&#xff1f;答&#xff1a;信息是可傳遞和共享的&#xff0c;可消除人們認知上的不確定因素&#xff0c;對人們的決策具有現實或潛在價值的知識。特征&#xff1a;普遍性、依附性、共…

Netflix推薦系統(Part two)-系統架構

Netflix在2013年公布了自己推薦系統的架構&#xff0c;本文主要總結和翻譯自System Architectures for Personalization and Recommendation&#xff0c;但這并不是一篇完整的翻譯文章。 Overview 首先&#xff0c;我們在下圖中提供推薦系統的整體系統圖。 該體系結構的主要組件…

母版頁可以動態切換嗎?

通過設置“MasterPageFile”屬性可以做到&#xff0c;然而這個屬性只能在“Page_PreInit”事件之中或之前設置。在Page_PreInit事件或之前&#xff0c;當前頁面包含的對象還沒有被生成&#xff0c;不能訪問&#xff0c;所以&#xff0c;如果想根據當前頁面上某個控件的值動態切…

httpclient 多附件上傳

多附件上傳實例&#xff1a; /*** 多附件上傳* param host* param uri* param attachment 附件* param param body參數* return*/public String upload(String host, String uri, Map<String,String> attachment, Map<String, String> param) {logger.info("…

加拿大大學 計算機專業排名2015,加拿大大學計算機專業排名top15

加拿大大學計算機專業排名。加拿大開設計算機專業的很多高校還提供帶薪實習機會&#xff0c;吸引了眾多國際學子前往留學。在加拿大計算機專業優秀的大學很多。同時&#xff0c;加拿大計算機專業排名在世界上也非常的靠前&#xff0c;在加拿大有很多大學值得廣大計算機熱愛者選…

如何讀懂并寫出裝逼的函數式代碼

今天在微博上看到了 有人分享了下面的這段函數式代碼&#xff0c;我把代碼貼到下面&#xff0c;不過我對原來的代碼略有改動&#xff0c;對于函數式的版本&#xff0c;咋一看&#xff0c;的確令人非常費解&#xff0c;仔細看一下&#xff0c;你可能就暈掉了&#xff0c;似乎完全…

如何打通高薪的黃金通道 成為職場金領

身在職場的你&#xff0c;是否想過有朝一日能獲得百萬年薪&#xff1f;最近&#xff0c;央視二套絕對挑戰特別節目巔峰營銷的熱播&#xff0c;引發各方人士對東風日產百萬年薪招兵營銷總監的關注。身價百萬的營銷總監人人想當&#xff0c;如何才能成為這樣的職場金領&#xff0…

iView 實戰系列教程(21課時)_2.iView 實戰教程之導航、路由、鑒權篇

在c盤創建一個iview-router的項目、然后使用默認的配置跳過添加vue-router的插件編譯我們的文件。編譯好之后&#xff0c;我們啟動App默認的頁面就打開了。默認兩個路由一個是about界面一個是home我們使用編輯器打開代碼&#xff0c;用我們的iview的menu組件替換掉這兩個路由在…