【正文】
和 可靠性 , 這也減少了應(yīng)用系統(tǒng)的維護(hù)費(fèi)用。 Java 語言是解釋型的 [10]。 Java 語言是分布式的 [10]。在以后的發(fā)展中,排序?qū)ξ覀兊膶W(xué)習(xí)和生活的影響會(huì)逐漸增大,因此設(shè)計(jì)開發(fā)一個(gè)排序算法動(dòng)畫演示系統(tǒng),以提高自己對(duì)排序算法的掌握程度 ,并希望該系統(tǒng)有助于初學(xué)者直觀學(xué)習(xí)排序算法。因此 ,要建立良好的數(shù)據(jù)結(jié)構(gòu),首先對(duì)系統(tǒng)按某種原則進(jìn)行分解,使系統(tǒng)中各模塊間獨(dú)立性強(qiáng),依賴性小,結(jié)構(gòu)靈活 ,易于維護(hù)。 Sorting Algorithm。 因此,本文以 java 為開發(fā)語言,設(shè)計(jì)開發(fā)了 基于姓名排序算法動(dòng)態(tài)演示系統(tǒng),有助于初學(xué)者的形象直觀的學(xué)習(xí)排序算法。并提供了自動(dòng)的廢料收集,使得程序員不必為 內(nèi)存管理 而擔(dān)憂。 Java 程序(后綴為 java 的文件)在 Java 平臺(tái)上被編譯為體系結(jié)構(gòu)中立的 字節(jié)碼 格式(后綴為 class 的文件),然后可以在實(shí)現(xiàn)這個(gè) Java 平臺(tái)的任何系統(tǒng)中運(yùn)行。 Java 語言是動(dòng)態(tài)的 [10]。 javadoc – 文檔生成器,從源碼注釋中提取文檔。 陜西理工學(xué)院畢業(yè)設(shè)計(jì) 第 5 頁 共 80 頁 2 排序算法 直接插入排序 (1) 基本原理 假設(shè)待排序的 n 個(gè)記錄 {L0, L1,?, Ln}順序存放在數(shù)組中,直接插入法在插入記錄 Li(i=1,2,?, n1)時(shí),記錄被劃分為兩個(gè)區(qū)間 [L0,Li1]和 [Li+1,Ln1],其中,前一個(gè)子區(qū)間已經(jīng)排好序,后一個(gè)子區(qū)間是當(dāng)前未排序的部分,將關(guān)鍵碼 Ki 與 Ki1Ki2,?, K0 依次比較,找出應(yīng)該插入的位置,將記錄 Li 插,然后將剩下的 i1 個(gè)元素按關(guān)鍵詞大小依次插入該有序序列,沒插入 一個(gè)元素后依然保持該序列有序,經(jīng)過 i1 趟排序后即成為有序序列。最壞情況 (非遞增 )下,最多比較 i 次,因此需要的比較次數(shù)是:所以,時(shí)間復(fù)雜度為 O(n2)。附加空間 O(1)。l[low].pareTo(pivotkey)= 0) { ++low。 }} } (3)時(shí)間復(fù)雜度分析 該算法運(yùn)行時(shí)間與元素的初始排列無關(guān)。i++){ tmp[k] = sr[i]。 } nodes[q].setNext(i)。堆排序的最壞時(shí)間復(fù)雜度為 O(nlogn)。 } else { pos = 0。 陜西理工學(xué)院畢業(yè)設(shè)計(jì) 第 14 頁 共 80 頁 3 系統(tǒng)設(shè)計(jì) 系統(tǒng)模塊結(jié)構(gòu) 根據(jù)需求分析,按功能劃分 8 個(gè)模塊,分別是:鏈表插入排序模塊、直接插入排序模塊、折半插入排序模塊、選擇排序模塊、歸并排序模塊、堆排序模塊、基數(shù)排序模塊。 陜西理工學(xué)院畢業(yè)設(shè)計(jì) 第 16 頁 共 80 頁 開 始i s r c .l e n g t h初 始 化j = s e l e c t M i n K e y ( s r c , i ) 。l o w h i g h amp。結(jié) 束NNn u m [ i ] ) . c o m p a r e T o (n u m [ j ] ) 0S t r i n g x = n u m [ i ] 。結(jié) 束YYYNNNi 2 6o r d e r [ i ] 1 amp。 //src[0]插入到插入位置 } repaintUnit(500)。 j) { ......記錄后移 } ......將 src[0]插入到指定位置 } 選擇排序 將字符串?dāng)?shù)組封裝為 VectorUnit,同時(shí)利用 GUI 在 ContentPanel(中間 JPanel)中繪制數(shù)據(jù);將 ()切入到排序代碼中,完成數(shù)組拷貝與賦值。該方法切入到排序代碼完成排序算法每一步實(shí)現(xiàn)效果。 //代碼跟隨 ().setSelectIndexs(new int[]{2})。 ()[q].setValue(i + )。// 找出較大者把較大者給 num[i] if ((num[i]).pareTo((num[j]))0) break。 i 。 } } 陜西理工學(xué)院畢業(yè)設(shè)計(jì) 第 26 頁 共 80 頁 5 測(cè)試 在 Java 虛擬機(jī)中運(yùn)行該系統(tǒng),得到系統(tǒng)運(yùn)行界面,導(dǎo)入排序數(shù)據(jù) (周生、丁模、呂學(xué)、許要、其勉、龔學(xué)、尹要、賀勉、郝生、姜模 ),點(diǎn)擊直接插入排序按鈕,并點(diǎn)擊開始按鈕,進(jìn)入直接插入排序過程界面,排序過程界面如圖 所示,運(yùn)行結(jié)果界面如圖 所示。 ③ 通過自己編寫的程序?qū)Ω鞣N排序性能的比較讓我更深入理解了他們的應(yīng)用④ 夠按要求編寫畢業(yè)設(shè)計(jì)報(bào)告書,能正確闡述設(shè)計(jì)和實(shí)驗(yàn)結(jié)果,正確繪制系統(tǒng)和程序框圖。直接選擇排序雖然交換次數(shù)很少,但比較次數(shù)較多。 ((order))。該方法切入到排序代碼完成排序算法每一步實(shí)現(xiàn)效果。 j = t。該方法切入到排序代碼完成排序算法每一步實(shí)現(xiàn)效果。實(shí)現(xiàn)代碼如下: private void mergeToShow(String[] sr,int s,int m,int t) { String[] tmp = new String[t s +1]。 changeUnit(units, index, j)。 // 延遲 time后重繪 陜西理工學(xué)院畢業(yè)設(shè)計(jì) 第 22 頁 共 80 頁 repaintUnit(1000)。 int j = index 2。 陜西理工學(xué)院畢業(yè)設(shè)計(jì) 第 20 頁 共 80 頁 開 始p o w e r 0初 始 化i d a t a . l e n g t hp o w e r d a t a [ i ] . l e n g t h ( )t e m p [ p o s ] [ o r d e r [ p o s ] ] = d a t a [ i ] 。YNYk + +NN 圖 歸并排序算法流程圖 (6) 堆排序 堆排序算法流程圖如圖 所示。l [ l o w ] = l [ h i g h ] 。s r c [ h i g h + 1 ] = s r c [ 0 ] 。 i++) { for (int j = 0。 for (int i = 0。 num[i] = num[j]。 i++) { int q = 0。 }else { tmp[k] = sr[j]。 i++) { int j = selectMinKey(src, i)。 l[high].pareTo(pivotkey) = 0) { high。 j = high + 1。 } src[j + 1] = src[0]。根據(jù)官方最新消息, MyEclipse 20xx陜西理工學(xué)院畢業(yè)設(shè)計(jì) 第 4 頁 共 80 頁 已經(jīng)正式發(fā)布! MyEclipse 20xx[2]支持 HTML JQuery和主流的 Javascript 庫(kù)。 ME(J2ME),micro edition,主要用于移動(dòng)設(shè)備、嵌入式設(shè)備上的 java 應(yīng)用程序,從 JDK 開始,改名為 Java ME。通常有兩種方法來創(chuàng)建線程:其一,使用型構(gòu)為 Thread(Runnable)的構(gòu)造子將一個(gè)實(shí)現(xiàn)了 Runnable 接口的對(duì)象包裝成一個(gè)線程,其二,從 Thread 類派生出子類并重寫 run方法,使用該子類創(chuàng)建的對(duì)象即為線程。 Java 語言是安全的。主要特性: Java 語言是易學(xué)的 [10]。 各個(gè)應(yīng)用領(lǐng)域迫切需要解決的問題,也是當(dāng)前數(shù)據(jù)結(jié)構(gòu)基本的研究?jī)?nèi)容之一在計(jì)算機(jī)科學(xué)與信息融為一體的今天,研究數(shù)據(jù)結(jié)構(gòu),既要 從 計(jì)算機(jī)技術(shù)的發(fā)展考慮,也要從信息技術(shù)的發(fā)展考慮,特別需要重視從理論到實(shí)際的轉(zhuǎn)化研究。本文以 Java 作為開發(fā)工具,設(shè)計(jì)與開發(fā)了基于姓名排序算法動(dòng)態(tài)演示系統(tǒng)。 數(shù)據(jù)結(jié)構(gòu)基本元素內(nèi)容的發(fā)展變化 , 為數(shù)據(jù)結(jié)構(gòu)的研究開拓 了 一個(gè)新的方向 [1]。 Java 技術(shù)具有卓越的通用性、高效性、平臺(tái)移植性和 安全 性,廣泛應(yīng)用于個(gè)人 PC、 數(shù)據(jù)中心 、 游戲 控制臺(tái)、 科學(xué) 超級(jí)計(jì)算機(jī) 、 移動(dòng)電話 和 互聯(lián)網(wǎng) ,同時(shí)擁有全球最大的開發(fā)者專業(yè)社群。 Java 的 強(qiáng)類型 機(jī)制、 異常處理 、垃圾的自動(dòng)收集等是 Java 程序健壯性的重要保證。與那些解釋型的高級(jí) 腳本語言 相比, Java 的性能還是較優(yōu)的。 (2) JDK 運(yùn)行環(huán)境 JDK[8](Java Development Kit) 是 Java 語言的軟件開發(fā)工具包 (SDK)。 MyEclipse 是一個(gè)十分優(yōu)秀的用于開發(fā) Java, J2EE 的 Eclipse 插件集合, MyEclipse 的功能非常強(qiáng)大,支持也十分廣泛,尤其是對(duì)各種開源產(chǎn)品的支持十分不錯(cuò)。 for (。 if (src[0].pareTo(src[m]) 0) {// high = m 1。 //軸記錄關(guān)鍵字 String pivotkey = l[low]。 圖 選擇排序示例 (2)算法描述 對(duì)字符串順序鏈表 src作選擇排序,返回值為空。 j = t。 圖 鏈表插入排序示例 (2) 算法描述 對(duì)有序 靜態(tài)鏈表 nodes作鏈表插入排序,返回值為空。 num[j].pareTo(num[j + 1])0) j = j + 1。 int pos = 0。 msd(temp[i], power)。l o w = 1 , h i g h = i 1 。p i v o t k e y = l [ l o w ] 。i + + 。n o d e s [ q ] . s e t N e x t ( i ) 。 ().setUnits(units)。 //代碼跟隨 ().setSelectIndexs(new int[]{2})。 src[index] = src[j]。 AccessoryPanel(右邊 JPanel)中加入 JList,通過 (int[] i)完成代碼跟隨。將 moveArrows()切入到排序代碼中, 完成 箭頭的移動(dòng) ; flashNext()切入到排序代碼中 完成 next 索引選擇處理效果 。該方法切入到排序代碼完成排序算法每一步實(shí)現(xiàn)效果。將 ()切入到排序代碼中, 完成單元到臨時(shí)數(shù)組的拷貝動(dòng)畫 。 (30)。這八種算法中,快速排序比較和移動(dòng)的次數(shù)是最少的。 陜西理工學(xué)院畢業(yè)設(shè)計(jì) 第 35 頁 共 80 頁 致謝 本文是在 指導(dǎo)老師的大力幫助 完成的,他們淵博的知識(shí)和嚴(yán)謹(jǐn)?shù)闹螌W(xué)作風(fēng)使我受益匪淺,對(duì)順利完成本系統(tǒng)起到了極大的作用。 陜西理工學(xué)院畢業(yè)設(shè)計(jì) 第 28 頁 共 80 頁 圖 快速排序運(yùn)行狀態(tài) 圖 快速排序運(yùn)行結(jié)果 點(diǎn)擊 選擇排序 按鈕,并點(diǎn)擊開始按鈕,進(jìn)入 選擇排序 過程界面如圖 所示,運(yùn)行結(jié)果界面如圖 所示。 if (power ()) { pos = (int) (power) 97。 num[i] = num[j]。 // q next修改 nodes[i].setNext(p)。amp。 //代碼跟隨 ().setSelectIndexs(new int[]{1})。該方法切入到排序代碼完成排序算法每一步實(shí)現(xiàn)效果。將().setSelectIndexs(new int[]{})。YYNNi 2 6j d a t a . l e n g t hd a t a [ k + + ] = t e m p [ i ] [ j ] 。i = j 。NN 圖 快速排序算法流程圖 (5) 歸并排序 歸并排序算法流程圖如圖 所示。s r c [ j ] = t e m p 。 開 始i s r c . l e n g t hi = 2s r c [ 0 ] = s r c [ i ] 。 } ++power。堆排序是不穩(wěn)定的,算法時(shí)間復(fù)雜度 O(nlogn)。 圖 堆調(diào)整示例 (2) 算法描述 已知字符串順序鏈表 num[s...m]中記錄的關(guān)鍵字除 num[s]之外均滿足堆的定義,本函數(shù)調(diào)整num[