【正文】
經(jīng)正式發(fā)布! MyEclipse 20xx[2]支持 HTML JQuery和主流的 Javascript 庫(kù)。 public void insertSort(String[] src) { for (int i = 2。 } src[j + 1] = src[0]。 public void binaryInsertionSort(String[] src) { for (int i = 2。 j = high + 1。由此可以將位置 i 作分界線,將序列 { [s],[s+1],...,[t]}分割成兩個(gè)子序列 { [s],[s+1],...,[i1]}和{ [i+1],[s+1],...,[t]}。 l[high].pareTo(pivotkey) = 0) { high。 } (3) 時(shí)間復(fù)雜度分析 如果每一次分劃操作后,左、右兩個(gè)子序列的長(zhǎng)度基本相等,則快速排序的效率最高,其最好情況時(shí)間復(fù)雜度為 O(nlog2n);反之,如果每次分劃操作所產(chǎn)生的兩個(gè)子序列,其中之一為空序列,此時(shí),快速排序效率最低,其最壞情況時(shí)間復(fù)雜度為 O(n2)。 i++) { int j = selectMinKey(src, i)。 圖 歸并排序示例 (2) 算法描述 將有序順序鏈表 sr[i...m]和 sr[m+1...n]歸并為有序的 sr[i...n] private void merge(String[] sr,int s,int m,int t){ String[] tmp = new String[t s +1]。 }else { tmp[k] = sr[j]。j++){ tmp[k] = sr[j]。 i++) { int q = 0。 public void adjustHeap(String[] num, int s, int t) { int i = s。 num[i] = num[j]。 基數(shù)排序( MSD) (1) 基本原理 是一種借助多關(guān)鍵字排序的思想對(duì)單邏輯關(guān)鍵字進(jìn)行排序的方法; MSD:先對(duì)最主要位關(guān)鍵字K0 進(jìn)行排序,將序列分成若干子序列,每個(gè)子序列中的記錄都具有相同的 K0 值,然后分別就 每個(gè)子序列對(duì)關(guān)鍵字 K1 進(jìn)行排序,按 K1 值得不同再分成若干更小的子序列,依次重復(fù)直至每個(gè)子序列中都有相同的關(guān)鍵字 [1]。 for (int i = 0。 for (int i = 0。 i++) { for (int j = 0。 s r c [ i ] = s r c [ i 1 ] 。s r c [ h i g h + 1 ] = s r c [ 0 ] 。結(jié) 束YY 圖 選擇排序算法流程圖 (4) 快速排序 快速排序算法流程圖如圖 所示。l [ l o w ] = l [ h i g h ] 。 陜西理工學(xué)院畢業(yè)設(shè)計(jì) 第 18 頁 共 80 頁 開 始初 始 化i = m amp。YNYk + +NN 圖 歸并排序算法流程圖 (6) 堆排序 堆排序算法流程圖如圖 所示。YYj = 2 * j 圖 堆排序算法流程圖 (7) 鏈表插入排序 鏈表插入排序算法流程圖如圖 所示。 陜西理工學(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 ] 。YYNNt e m p [ i ] [ j ]! = n u l lYNi + +i + +i + +j + + 圖 基數(shù) MSD 排序算法流程圖 陜西理工學(xué)院畢業(yè)設(shè)計(jì) 第 21 頁 共 80 頁 4 實(shí)現(xiàn) 直接插入排序 將字符串?dāng)?shù)組封裝為 VectorUnit,同時(shí)利用 GUI 在 ContentPanel(中間 JPanel)中繪制數(shù)據(jù);將 ()切入到排序代碼中,完成數(shù)組拷貝與賦值 。 int j = index 2。該方法切入到排序代碼完成排序算法每一步實(shí)現(xiàn)效果。 // 延遲 time后重繪 陜西理工學(xué)院畢業(yè)設(shè)計(jì) 第 22 頁 共 80 頁 repaintUnit(1000)。實(shí)現(xiàn)代碼如下: public void selectSortToShow(String[] src, int index) throws SortPlayingException { units = (src)。 changeUnit(units, index, j)。 (units,(low),(0))。實(shí)現(xiàn)代碼如下: private void mergeToShow(String[] sr,int s,int m,int t) { String[] tmp = new String[t s +1]。 j = t。該方法切入到排序代碼完成排序算法每一步實(shí)現(xiàn)效果。 ()[i].setValue(p + )。 j = t。 num[j] = x。該方法切入到排序代碼完成排序算法每一步實(shí)現(xiàn)效果。 } else { pos = 0。 ((order))。 陜西理工學(xué)院畢業(yè)設(shè)計(jì) 第 29 頁 共 80 頁 圖 選擇排序運(yùn)行狀態(tài) 圖 選擇排序運(yùn)行結(jié)果 點(diǎn)擊歸并排序按鈕,并點(diǎn)擊開始按鈕,進(jìn)入歸并排序過程界面如圖 所示,運(yùn)行結(jié)果界面如圖 所示。直接選擇排序雖然交換次數(shù)很少,但比較次數(shù)較多。在此向他們表示我最衷心的感謝! 大學(xué)四年的學(xué)涯生活,有老師和同學(xué)的陪伴,不僅有技能方面的學(xué)習(xí),更加體會(huì)到友情的重要性,在這次論文完成的過程中有他們的幫助,就是真實(shí)的驗(yàn)證 ,再次感謝他們的幫助。 ③ 通過自己編寫的程序?qū)Ω鞣N排序性能的比較讓我更深入理解了他們的應(yīng)用④ 夠按要求編寫畢業(yè)設(shè)計(jì)報(bào)告書,能正確闡述設(shè)計(jì)和實(shí)驗(yàn)結(jié)果,正確繪制系統(tǒng)和程序框圖。 陜西理工學(xué)院畢業(yè)設(shè)計(jì) 第 33 頁 共 80 頁 圖 MSD 排序運(yùn)行狀態(tài) 圖 MSD 排序運(yùn)行結(jié)果 陜西理工學(xué)院畢業(yè)設(shè)計(jì) 第 34 頁 共 80 頁 總結(jié) 通過本次系統(tǒng)的研究,可以看出各個(gè)不同的排序算法排序的過程,以及之間在排列整數(shù)時(shí)的差異。 } } 陜西理工學(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é)果界面如圖 所示。 ((temp))。 i 。 } 陜西理工學(xué)院畢業(yè)設(shè)計(jì) 第 25 頁 共 80 頁 基數(shù)排序( MSD) 將字符串?dāng)?shù)組封裝為 RadixData,同時(shí)利用 GUI在 ContentPanel(中間 JPanel)中繪制數(shù)據(jù)。// 找出較大者把較大者給 num[i] if ((num[i]).pareTo((num[j]))0) break。將().setSelectIndexs(new int[]{})。 ()[q].setValue(i + )。 } 鏈表插入排序 將字符串?dāng)?shù)組封裝為 LinkData,同時(shí)利用 GUI 在 ContentPanel(中間 JPanel)中繪制數(shù)據(jù)。 //代碼跟隨 ().setSelectIndexs(new int[]{2})。 } 歸并排序 將字符串?dāng)?shù)組封裝為 VectorUnit,同時(shí) 利用 GUI 在 ContentPanel(中間 JPanel)中繪制數(shù)據(jù);將 movingUnit()完成數(shù)組的移動(dòng)與交換 。該方法切入到排序代碼完成排序算法每一步實(shí)現(xiàn)效果。 if (j != index) { String temp = src[index]。 j) { ......記錄后移 } ......將 src[0]插入到指定位置 } 選擇排序 將字符串?dāng)?shù)組封裝為 VectorUnit,同時(shí)利用 GUI 在 ContentPanel(中間 JPanel)中繪制數(shù)據(jù);將 ()切入到排序代碼中,完成數(shù)組拷貝與賦值。 //數(shù)組拷貝及 代碼跟隨 int low = 1, high = index 1。 //src[0]插入到插入位置 } repaintUnit(500)。實(shí)現(xiàn)代碼如下: public void insertSortToShow(String[] src, int index) { units = (src)。結(jié) 束YYYNNNi 2 6o r d e r [ i ] 1 amp。p = n o d e s [ p ] . g e t N e x t ( ) 。結(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é) 束NYYs r [ i ] s r [ j ]t m p [ k ] = s r [ i ] 。l o w h i g h amp。l [ 0 ] = l [ l o w ] 。 陜西理工學(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 ) 。 開 始i s r c .l e n g t h初 始 化s r c [ 0 ] = s r c [ i ] 。 陜西理工學(xué)院畢業(yè)設(shè)計(jì) 第 14 頁 共 80 頁 3 系統(tǒng)設(shè)計(jì) 系統(tǒng)模塊結(jié)構(gòu) 根據(jù)需求分析,按功能劃分 8 個(gè)模塊,分別是:鏈表插入排序模塊、直接插入排序模塊、折半插入排序模塊、選擇排序模塊、歸并排序模塊、堆排序模塊、基數(shù)排序模塊。 power getStringMaxLength(temp[i])) { (1)。 } else { pos = 0。 int[] order = new int[26]。堆排序的最壞時(shí)間復(fù)雜度為 O(nlogn)。amp。 } nodes[q].setNext(i)。排序示例見圖 。i++){ tmp[k] = sr[i]。amp。 }} } (3)時(shí)間復(fù)雜度分析 該算法運(yùn)行時(shí)間與元素的初始排列無關(guān)。排序示例見圖 。l[low].pareTo(pivotkey)= 0) { ++low。 public int partition(String[] l,int low,int high) { //用字表的第一個(gè)記錄軸的記錄 l[0] = l[low]。附加空間 O(1)。 while (low = high) { int m = (low + high) / 2。最壞情況 (非遞增 )下,最多比較 i 次,因此需要的比較次數(shù)是:所以,時(shí)間復(fù)雜度為 O(n2)。 int j = i 2。 陜西理工學(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 趟排序后即成為有序序列。它是功能豐富的 JavaEE 集成開發(fā)環(huán)境 ,包括了完備的編碼、調(diào)試、測(cè)試和