【java】+排序算法動(dòng)畫(huà)演示系統(tǒng)_第1頁(yè)
【java】+排序算法動(dòng)畫(huà)演示系統(tǒng)_第2頁(yè)
【java】+排序算法動(dòng)畫(huà)演示系統(tǒng)_第3頁(yè)
【java】+排序算法動(dòng)畫(huà)演示系統(tǒng)_第4頁(yè)
【java】+排序算法動(dòng)畫(huà)演示系統(tǒng)_第5頁(yè)
已閱讀5頁(yè),還剩54頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

獨(dú)創(chuàng)性聲明本人鄭重聲明:所呈交的畢業(yè)論文〔設(shè)計(jì)〕是本人在指導(dǎo)老師指導(dǎo)下取得的研究成果。除了文中特別加以注釋和致謝的地方外,論文〔設(shè)計(jì)〕中不包含其他人已經(jīng)發(fā)表或撰寫(xiě)的研究成果。與本研究成果相關(guān)的所有人所做出的任何奉獻(xiàn)均已在論文〔設(shè)計(jì)〕中作了明確的說(shuō)明并表示了謝意。簽名:年月日授權(quán)聲明本人完全了解****有關(guān)保存、使用本科生畢業(yè)論文〔設(shè)計(jì)〕的規(guī)定,即:有權(quán)保存并向國(guó)家有關(guān)部門或機(jī)構(gòu)送交畢業(yè)論文〔設(shè)計(jì)〕的復(fù)印件和磁盤,允許畢業(yè)論文〔設(shè)計(jì)〕被查閱和借閱。本人授權(quán)許昌學(xué)院可以將畢業(yè)論文〔設(shè)計(jì)〕的全部或局部?jī)?nèi)容編入有關(guān)數(shù)據(jù)庫(kù)進(jìn)行檢索,可以采用影印、縮印或掃描等復(fù)制手段保存、匯編論文〔設(shè)計(jì)〕。本人論文〔設(shè)計(jì)〕中有原創(chuàng)性數(shù)據(jù)需要保密的局部為〔如沒(méi)有,請(qǐng)?zhí)顚?xiě)“無(wú)〞〕:簽名:年月日指導(dǎo)教師簽名:年月日摘要 排序在人們的日常生活和學(xué)習(xí)、科研、生產(chǎn)等各個(gè)方面有著重要的應(yīng)用。因此掌握常用的排序算法是很必要的。本系統(tǒng)采用java2SE為開(kāi)發(fā)工具,實(shí)現(xiàn)八種不同排序算法即:快速排序、冒泡排序、堆排序、直接插入排序、希爾排序、直接選擇排序、歸并排序、基數(shù)排序的排序演示。關(guān)鍵詞:演示排序代碼AbstractOrderinpeople'sdailylivesandlearning,research,productionandotheraspectsofimportantapplications.Sohavethesortingalgorithmusedisverynecessary.Java2SEforthesystemdevelopmenttools,toachieveeightdifferentsortingalgorithmthatis:QuickSort,BubbleSort,HeapSort,InsertionSortdirectlyHilltosort,directselectionsort,mergesorttosorttheorderofthebasepresentation.Keywords:demoSortcode目錄正文 11系統(tǒng)概述 11.1工程概述 1工程簡(jiǎn)介 1工程開(kāi)發(fā)的意義 11.2系統(tǒng)需求描述 1功能需求 11.3系統(tǒng)環(huán)境設(shè)計(jì) 2硬件環(huán)境 2軟件環(huán)境 2系統(tǒng)接口 22系統(tǒng)陳述 32.1系統(tǒng)范圍 32.2用例分析 3識(shí)別參與者 3識(shí)別用例 4構(gòu)建用例圖 3細(xì)化用例圖 43構(gòu)建類模型 53.1確定類 5尋找類 5篩選類 5準(zhǔn)備數(shù)據(jù)字典 53.2確定屬性 53.4繼承分析 63.5構(gòu)建系統(tǒng)包圖 64狀態(tài)模型 74.1確定狀態(tài) 74.2構(gòu)建事件跟蹤圖 7準(zhǔn)備交互式腳本 7確定事件 8事件跟蹤圖 84.3構(gòu)建狀態(tài)圖 95交互模型 105.1構(gòu)建順序模型 10準(zhǔn)備場(chǎng)景 10順序圖 105.2構(gòu)建活動(dòng)模型 11確定活動(dòng) 11活動(dòng)圖 126定義效勞 136.1效勞分析 136.2系統(tǒng)最終類圖 147系統(tǒng)實(shí)現(xiàn) 147.1系統(tǒng)設(shè)計(jì) 14優(yōu)化分析模型 14系統(tǒng)體系結(jié)構(gòu)設(shè)計(jì) 16用戶界面設(shè)計(jì) 167.2類設(shè)計(jì) 178系統(tǒng)測(cè)試 188.1測(cè)試環(huán)境 188.2用戶界面測(cè)試 189系統(tǒng)使用及說(shuō)明 19結(jié)束語(yǔ) 21參考文獻(xiàn) 21附錄 23謝辭 54排序算法動(dòng)畫(huà)演示系統(tǒng)第1章系統(tǒng)概述1.1工程概述工程簡(jiǎn)介排序在人們的日常生活和學(xué)習(xí)、科研、生產(chǎn)等各個(gè)方面有著重要的應(yīng)用。因此掌握常用的排序算法是很必要的。此次畢業(yè)設(shè)計(jì)擬開(kāi)發(fā)一個(gè)排序算法動(dòng)畫(huà)演示系統(tǒng),以提高對(duì)排序算法的掌握程度。本系統(tǒng)實(shí)現(xiàn)八種不同排序算法即:快速排序、冒泡排序、堆排序、直接插入排序、希爾排序、直接選擇排序、歸并排序、基數(shù)排序的排序演示。用戶可以選擇排序算法以演示輸入數(shù)據(jù)在該排序算法下的排序過(guò)程。工程開(kāi)發(fā)的意義 隨著計(jì)算機(jī)技術(shù)的開(kāi)展,各種排序算法不斷的被提出。排序算法在計(jì)算機(jī)科學(xué)中有非常重要的意義,且應(yīng)用很廣泛。在以后的開(kāi)展中排序?qū)ξ覀兊膶W(xué)習(xí)和生活的影響會(huì)逐漸增大,很有必要學(xué)習(xí)排序知識(shí)。因此此次畢業(yè)設(shè)計(jì)一方面使自己掌握排序的知識(shí),另一方面鍛煉一下獨(dú)立開(kāi)發(fā)系統(tǒng)的能力。1.2系統(tǒng)需求描述1.2.1 排序算法動(dòng)畫(huà)演示系統(tǒng)排序算法動(dòng)畫(huà)演示系統(tǒng)快速排序演示排序演示顯示代碼冒泡排序演示堆排序演示直接插入排序演示希爾排序演示直接選擇排序演示歸并排序演示基數(shù)排序演示輸入數(shù)據(jù)圖1.1系統(tǒng)功能圖1〕排序算法演示處理 排序算法演示模塊能夠根據(jù)用戶選擇的排序算法對(duì)數(shù)據(jù)進(jìn)行排序,動(dòng)態(tài)的顯示出排序過(guò)程。2〕代碼顯示 用于顯示用戶選擇的排序算法的代碼。1.3系統(tǒng)環(huán)境設(shè)計(jì)硬件環(huán)境A.一臺(tái)奔騰系列微機(jī)B.內(nèi)存要求在512M及其以上C.光柵顯示器或液晶顯示器或等離子顯示器一臺(tái)軟件環(huán)境A.Windows2000或WindowsXP及其以上操作系統(tǒng)B.安裝有JDK6及其以上開(kāi)發(fā)包系統(tǒng)接口本系統(tǒng)要求有JDK6及其以上開(kāi)發(fā)包就行,所以在實(shí)現(xiàn)上不是很復(fù)雜不需要什么系統(tǒng)接口。第2章系統(tǒng)陳述2.1系統(tǒng)范圍 對(duì)于排序算法演示,本系統(tǒng)用用戶輸入的數(shù)據(jù)進(jìn)行各種排序,并顯示各排序算法的代碼。2.2用例分析識(shí)別參與者參與者就是系統(tǒng)在執(zhí)行的過(guò)程中不可缺少的且與系統(tǒng)有交互行為的外部實(shí)體、對(duì)象或系統(tǒng)。1.用戶翻開(kāi)系統(tǒng)界面進(jìn)行想要的操作或不進(jìn)行任何操作。2.用戶輸入數(shù)據(jù)。3.用戶可以從界面上選擇所要進(jìn)行排序演示。4.系統(tǒng)將數(shù)據(jù)的排序演示過(guò)程和用戶所選的排序算法的代碼呈現(xiàn)給用戶。5.系統(tǒng)退出。經(jīng)過(guò)上述分析,發(fā)現(xiàn)系統(tǒng)在執(zhí)行的過(guò)程中只有兩個(gè)參與者,它們是用戶和界面。圖2.1顯示了這兩個(gè)參與者。用戶用戶界面圖2.1參與者識(shí)別用例用例是系統(tǒng)執(zhí)行的外部可見(jiàn)的產(chǎn)生對(duì)參與者有價(jià)值結(jié)果的動(dòng)作序列。基于問(wèn)題陳述給出以下分析并從中發(fā)現(xiàn)系統(tǒng)用例。1.使用者翻開(kāi)系統(tǒng)界面,輸入數(shù)據(jù)并從中選擇排序算法。2.系統(tǒng)顯示相應(yīng)排序演示操作并顯示相應(yīng)排序算法的代碼。從上述分析中我們可以初步識(shí)別出系統(tǒng)用例:輸入數(shù)據(jù)、選擇排序算法、排序演示、顯示代碼,圖2.2給出了這四個(gè)用例。選擇排序算法選擇排序算法排序演示代碼輸入數(shù)據(jù)圖2.2系統(tǒng)用例2.2.3用戶排序算法演示用戶排序算法演示用戶輸入數(shù)據(jù)輸入數(shù)據(jù)處理數(shù)據(jù)處理數(shù)據(jù)圖2.3系統(tǒng)用例圖〔一〕細(xì)化用例圖將用例細(xì)化可得到分解的用例:將“排序演示〞用例分解為:A:選擇排序算法從界面上選擇要進(jìn)行排序的排序算法B:確定數(shù)據(jù)移動(dòng)順序根據(jù)選擇的排序算法確定數(shù)據(jù)移動(dòng)順序C:演示排序過(guò)程顯示選擇的排序算法對(duì)輸入數(shù)據(jù)的排序過(guò)程和排序算法代碼用戶用戶界面排序算法演示提供提供顯示排序算法代碼排序演示選擇排序算法輸入數(shù)據(jù)提供圖2.4系統(tǒng)用例圖〔二〕Extend第3章構(gòu)建類模型Extend3.1確定類尋找類根據(jù)名詞識(shí)別法從需求陳述中獲取如下類與對(duì)象:系統(tǒng)界面輸入數(shù)據(jù)數(shù)據(jù)排序代碼排序演示算法演示過(guò)程用戶代碼。篩選類1.無(wú)關(guān)刪除本系統(tǒng)進(jìn)行特征提取只關(guān)心數(shù)據(jù)、算法、排序代碼、算法演示過(guò)程等處理過(guò)程,其它的都不是本系統(tǒng)關(guān)心的。在上面獲取的對(duì)象中‘系統(tǒng)’和‘用戶’和本系統(tǒng)內(nèi)部處理無(wú)關(guān),所以需要?jiǎng)h除。2.與實(shí)現(xiàn)相關(guān)的刪除用戶輸入的數(shù)據(jù),并不能作為一個(gè)獨(dú)立的類進(jìn)行操作,所以需要?jiǎng)h除。3.重復(fù)刪除排序代碼和代碼在此都表示排序算法代碼,所以刪除排序代碼。4.最終確定的類經(jīng)過(guò)以上幾步的篩選且由于功能簡(jiǎn)單確定為一個(gè)類:排序演示。準(zhǔn)備數(shù)據(jù)字典上一步確定了一個(gè)類,對(duì)這個(gè)類進(jìn)行介紹:排序演示:該類主要是呈現(xiàn)給用戶的圖像界面,把數(shù)據(jù)排序的演示過(guò)程和排序算法的代碼呈現(xiàn)給用戶。3.2確定屬性屬性是對(duì)象或類的數(shù)值特性及對(duì)象或類的性質(zhì),借助屬性能夠?qū)?duì)象和類的結(jié)構(gòu)有更清晰的認(rèn)識(shí),以下來(lái)分析本系統(tǒng)所屬類的屬性。本系統(tǒng)有一個(gè)類:排序演示。根據(jù)問(wèn)題陳述,首先要的把本系統(tǒng)所具有的功能呈現(xiàn)給用戶,其次需要用戶選擇排序算法,把輸入的數(shù)據(jù)按照選擇的排序算法得到的排序過(guò)程和排序代碼顯示給用戶。具有的屬性為排序算法名〔即用戶選擇的排序算法的名字,由用戶按按鈕獲得〕。所以屬性可以說(shuō)是排序算法選擇按鈕。其次在演示過(guò)程用于對(duì)數(shù)據(jù)進(jìn)行排序,確定數(shù)據(jù)移動(dòng)的順序,具有的屬性為:速度。顯示用戶選擇的排序算法的代碼。具有的屬性為:排序算法名〔同上〕。所以排序演示類具有的屬性為:排序算法選擇按鈕、速度。經(jīng)過(guò)上述分析給出帶有屬性的類圖:導(dǎo)出導(dǎo)出使用演示過(guò)程排序算法名速度圖3.2含屬性的類圖3.4繼承分析在本系統(tǒng)中有一個(gè)類:排序演示類。所以本系統(tǒng)不存在泛化關(guān)系。3.5構(gòu)建系統(tǒng)包圖包是將有著公共主題的一組元素,本系統(tǒng)含有一個(gè)類。所以將本系統(tǒng)的類為一個(gè)包:排序演示包。圖3.3顯示了本系統(tǒng)的包圖。排序過(guò)程排序過(guò)程圖3.3系統(tǒng)包圖圖3.4描述了排序演示包的構(gòu)成。排序演示包構(gòu)成演示過(guò)程演示過(guò)程排序算法名速度圖3.4演示過(guò)程包的構(gòu)成第4章?tīng)顟B(tài)模型4.1確定狀態(tài)狀態(tài)是對(duì)象的生命周期中的一個(gè)條件或狀況,在此期間對(duì)象將滿足某些條件、執(zhí)行某些活動(dòng)或等待某些事件。當(dāng)用戶啟動(dòng)本系統(tǒng)的界面時(shí)系統(tǒng)開(kāi)始運(yùn)行,經(jīng)過(guò)顯示排序過(guò)程和顯示排序算法的代碼結(jié)束本次處理。在這個(gè)過(guò)程中具有多個(gè)狀態(tài),首先用戶需要啟動(dòng)界面,接著接受用戶輸入的數(shù)據(jù),接受用戶的選擇,然后顯示排序過(guò)程和排序算法的代碼,下一次開(kāi)始或結(jié)束。排序演示類有如下?tīng)顟B(tài):開(kāi)始〔用戶啟動(dòng)界面〕,運(yùn)行狀態(tài)〔接受用戶輸入、選擇開(kāi)始處理〕結(jié)束狀態(tài)〔傳遞處理結(jié)果〕。4.2構(gòu)建事件跟蹤圖準(zhǔn)備交互式腳本腳本是指系統(tǒng)在某一次執(zhí)行期間出現(xiàn)的一系列事件,即序列事件。每當(dāng)系統(tǒng)進(jìn)行一次執(zhí)行時(shí)系統(tǒng)中對(duì)象與外界用戶交換信息即產(chǎn)生一個(gè)事件開(kāi)始,繼而產(chǎn)生一系列事件觸發(fā)整個(gè)過(guò)程的執(zhí)行直到結(jié)束。系統(tǒng)一次執(zhí)行過(guò)程中的正常腳本:1.用戶啟動(dòng)系統(tǒng)界面2.系統(tǒng)界面要求用戶輸入待排序的數(shù)據(jù)3.系統(tǒng)界面接受用戶輸入的數(shù)據(jù)4.系統(tǒng)界面要求用戶選擇排序算法5.系統(tǒng)界面接受用戶選擇的排序算法,并傳遞排序算法名進(jìn)行處理6.系統(tǒng)界面接受處理結(jié)果7.系統(tǒng)界面顯示演示過(guò)程和用戶選擇的排序算法的代碼8.下一次運(yùn)行或系統(tǒng)退出系統(tǒng)一次執(zhí)行過(guò)程中的異常腳本:1.用戶啟動(dòng)系統(tǒng)界面2.系統(tǒng)界面要求用戶輸入數(shù)據(jù)3.系統(tǒng)界面要求用戶選擇排序算法4.系統(tǒng)界面結(jié)束用戶選擇排序算法5.系統(tǒng)界面確認(rèn)出錯(cuò),系統(tǒng)內(nèi)部處理出錯(cuò)6.系統(tǒng)界面取消此次操作7.系統(tǒng)界面請(qǐng)求用戶輸入數(shù)據(jù)8.系統(tǒng)界面請(qǐng)求選擇排序算法確定事件根據(jù)腳本確定如下事件:?jiǎn)?dòng)界面、要求輸入、要求選擇、接受選擇、傳遞排序算法名、接受處理結(jié)果、顯示演示過(guò)程和用戶選擇的排序算法的代碼、等待下一次運(yùn)行或系統(tǒng)退出等。事件跟蹤圖從上一節(jié)中找出了該系統(tǒng)在一次執(zhí)行過(guò)程中的所發(fā)生的事件,和這些事件相關(guān)的對(duì)象為用戶、界面、演示過(guò)程、代碼等。那么此節(jié)的事件跟蹤圖就是把這些事件和相應(yīng)的對(duì)象清晰的表示出來(lái),豎線代表對(duì)象,箭頭代表發(fā)生的事件。事件跟蹤圖如圖4.1所示:用戶用戶界面演示過(guò)程類果傳輸結(jié)果出入輸入圖4.1系統(tǒng)事件跟蹤圖4.3構(gòu)建狀態(tài)圖下面給出了排序演示類的狀態(tài)圖:接受退出顯示處理接受輸入圖4.2排序演示類的狀態(tài)圖第5章交互模型本章主要用順序圖、活動(dòng)圖來(lái)描述交互模型。順序圖顯示交互的對(duì)象和交互的時(shí)間順序,而活動(dòng)圖顯示計(jì)算的處理步驟之間的控制流。5.1構(gòu)建順序模型順序建模用于描述對(duì)象之間的動(dòng)態(tài)交互關(guān)系,著重表達(dá)了對(duì)象間消息傳遞的時(shí)間順序。順序模型包括倆局部:一是場(chǎng)景的準(zhǔn)備,二是構(gòu)建順序圖。準(zhǔn)備場(chǎng)景場(chǎng)景包含對(duì)象之間的消息以及對(duì)象所執(zhí)行的活動(dòng),每條消息把信息從一個(gè)對(duì)象傳遞到另一個(gè)對(duì)象。以下是本系統(tǒng)的一個(gè)與實(shí)際用戶交互的場(chǎng)景:1.某一用戶啟動(dòng)系統(tǒng)界面2.系統(tǒng)顯示系統(tǒng)界面3.系統(tǒng)等待用戶輸入數(shù)據(jù)4.用戶輸入數(shù)據(jù)5.系統(tǒng)等待用戶選擇排序算法6.用戶選擇排序算法7.系統(tǒng)接受用戶選擇排序算法8.系統(tǒng)界面把處理結(jié)果顯示出來(lái),并呈現(xiàn)給用戶9.系統(tǒng)等待下一次運(yùn)行或關(guān)閉界面10.用戶關(guān)閉界面11.系統(tǒng)退出順序圖順序圖描述了對(duì)象隨時(shí)間的推移相互之間交互信息的過(guò)程,其中顯示的對(duì)象沿豎軸排列,而交互的信息沿水平軸按時(shí)間的順序排序。用戶用戶界面演示過(guò)程圖5.1系統(tǒng)順序圖5.2構(gòu)建活動(dòng)模型確定活動(dòng)一個(gè)活動(dòng)是一個(gè)狀態(tài)機(jī)中進(jìn)行的非原子的執(zhí)行單元,活動(dòng)的執(zhí)行最終會(huì)演化成一系列獨(dú)立的動(dòng)作的執(zhí)行。而每個(gè)動(dòng)作的執(zhí)行將會(huì)改變系統(tǒng)的狀態(tài)和消息的傳遞。一個(gè)動(dòng)作可以調(diào)用另一個(gè)動(dòng)作,同時(shí)也可以發(fā)送一個(gè)信號(hào)。以下是本系統(tǒng)某一次執(zhí)行過(guò)程,可以從中活動(dòng)系統(tǒng)一次執(zhí)行過(guò)程中的活動(dòng)。1.用戶要求進(jìn)行排序算法演示并顯示排序代碼2.用戶需要啟動(dòng)系統(tǒng)3.用戶輸入數(shù)據(jù)4.用戶選擇排序算法5.系統(tǒng)對(duì)數(shù)據(jù)進(jìn)行排序處理6.系統(tǒng)對(duì)數(shù)據(jù)進(jìn)行移動(dòng)處理7.系統(tǒng)對(duì)排序算法進(jìn)行顯示處理8.系統(tǒng)顯示排序演示過(guò)程和排序算法的代碼9.系統(tǒng)等待下一次運(yùn)行或此次處理結(jié)束,活動(dòng)終止活動(dòng)圖活動(dòng)圖主要用于描述系統(tǒng)在一次執(zhí)行過(guò)程中各種活動(dòng)的執(zhí)行順序,即描述一個(gè)操作中的所要進(jìn)行的各種活動(dòng)的執(zhí)行流程。一個(gè)活動(dòng)圖一般包括動(dòng)作、活動(dòng)節(jié)點(diǎn)、流和對(duì)象值。圖5.2給出了本系統(tǒng)在一次執(zhí)行過(guò)程的活動(dòng)圖。戶結(jié)束圖5.2系統(tǒng)活動(dòng)圖第6章定義效勞在第三章中的類模型無(wú)法完全確定各個(gè)類的效勞,而建立的狀態(tài)模型和交互模型之后,才能最終確定效勞,因?yàn)檫@兩個(gè)模型確定了系統(tǒng)各類應(yīng)具有的效勞。6.1效勞分析確定效勞需要從兩個(gè)方面進(jìn)行:一是類實(shí)體的常規(guī)行為,二是系統(tǒng)中特殊需要的行為。1.常規(guī)行為直接從類中導(dǎo)出操作,一般類都定義了屬性,而每個(gè)屬性都是可以被訪問(wèn)的,即每個(gè)含有屬性的類應(yīng)該定義能夠訪問(wèn)該類屬性的效勞。排序演示類含有兩個(gè)屬性,定義訪問(wèn)排序算法名和數(shù)據(jù)移動(dòng)的速度的效勞。2.從狀態(tài)模型中導(dǎo)出操作第四章確定了如下事件:要求輸入、接受輸入、要求選擇、接受選擇、傳遞排序算法名、接受處理結(jié)果、顯示演示過(guò)程和排序算法的代碼、系統(tǒng)退出。我們可以從中導(dǎo)出如下效勞:選擇排序算法、傳遞排序算法名、顯示演示過(guò)程和排序算法的代碼、系統(tǒng)退出等效勞。3.從交互模型中導(dǎo)出操作順序圖描述了對(duì)象之間動(dòng)態(tài)的交互關(guān)系,并且描述了這些對(duì)象隨時(shí)間的推移相互之間交互信息的過(guò)程。對(duì)象之間的交互信息必須啟動(dòng)相應(yīng)的操作來(lái)完成。我們可以從順序圖得出如下效勞:顯示界面、輸入數(shù)據(jù)、選擇排序算法、傳遞排序算法名、顯示演示過(guò)程和排序算法的代碼、關(guān)閉界面等。我們從活動(dòng)圖中可得到如下操作:輸入數(shù)據(jù)、選擇排序算法、對(duì)數(shù)據(jù)進(jìn)行排序處理、對(duì)數(shù)據(jù)進(jìn)行移動(dòng)處理、排序算法進(jìn)行顯示處理、顯示排序演示過(guò)程、顯示排序算法的代碼。4.確定效勞從上面得出了兩個(gè)效勞,因?yàn)樗俣刃诳梢杂眯菝邥r(shí)間控制,經(jīng)過(guò)對(duì)得到的效勞進(jìn)行篩選和合并相同效勞,得出如下最終效勞:獲得排序算法名,即獲得用戶選擇的按鈕。6.2系統(tǒng)最終類圖經(jīng)過(guò)以上分析我們得出了類以及類的屬性和操作,下面對(duì)各類進(jìn)行描述和建立含屬性、操作的類圖。(1)類描述1.排序演示類屬性:排序算法選擇按鈕效勞:獲得排序算法名、顯示排序演示過(guò)程、顯示排序算法代碼作用:接受用戶選擇的排序算法名、使數(shù)據(jù)移動(dòng)、顯示排序演示過(guò)程、顯示排序算法代碼等。(2)最終類圖導(dǎo)出導(dǎo)出演示過(guò)程排序算法名速度輸入數(shù)據(jù)圖6.1最終類圖第7章系統(tǒng)實(shí)現(xiàn)在分析階段已經(jīng)明確系統(tǒng)應(yīng)該做那些內(nèi)容,本章系統(tǒng)實(shí)現(xiàn)就是把系統(tǒng)應(yīng)該做的事情轉(zhuǎn)變成系統(tǒng)的實(shí)現(xiàn)方案。7.1系統(tǒng)設(shè)計(jì)優(yōu)化分析模型本系統(tǒng)的功能就是將用戶輸入的數(shù)據(jù)在用戶選擇的排序算法下的排序過(guò)程經(jīng)過(guò)一系列的處理最后將得到的排序演示和排序算法的代碼顯示給用戶。所以可以將本系統(tǒng)劃分為四個(gè)子系統(tǒng):輸入子系統(tǒng)、選擇子系統(tǒng)、處理子系統(tǒng)和顯示子系統(tǒng)。輸入子系統(tǒng)主要實(shí)現(xiàn)待排序數(shù)據(jù)的輸入、選擇子系統(tǒng)主要實(shí)現(xiàn)排序算法的選擇;處理子系統(tǒng)主要是處理數(shù)據(jù)排序、數(shù)據(jù)移動(dòng)處理等;顯示子系統(tǒng)主要是把最后得到的排序演示和排序算法的代碼顯示在界面上。圖7.1給出了本系統(tǒng)的子系統(tǒng)之間的關(guān)系。統(tǒng)處理子系統(tǒng)顯示子系統(tǒng)排序算法演示系統(tǒng)結(jié)果輸入子系統(tǒng)數(shù)據(jù)圖7.1子系統(tǒng)圖輸入子系統(tǒng)主要是當(dāng)用戶輸入數(shù)據(jù)時(shí)接受數(shù)據(jù);選擇子系統(tǒng)主要是當(dāng)用戶選擇排序算法時(shí)接受選擇;處理子系統(tǒng)主要使數(shù)據(jù)的移動(dòng)和排序算法的代碼顯示出來(lái);顯示子系統(tǒng)將得到的排序演示過(guò)程和排序算法的代碼顯示出來(lái)。圖7.2給出了系統(tǒng)的架構(gòu):戶界面處理子系統(tǒng)顯示子系統(tǒng)面輸入子系統(tǒng)面選擇子系統(tǒng)界面圖7.2子系統(tǒng)架構(gòu)圖系統(tǒng)體系結(jié)構(gòu)設(shè)計(jì)本系統(tǒng)經(jīng)過(guò)用戶選擇排序算法開(kāi)始執(zhí)行,只能由用戶激發(fā)系統(tǒng)開(kāi)始執(zhí)行,一次只能處理一種排序算法演示,一次處理完成之后,然后系統(tǒng)將處理的結(jié)果反應(yīng)給用戶。由用戶和系統(tǒng)交互來(lái)支配系統(tǒng)的運(yùn)行。下列圖給出了本系統(tǒng)的交互圖:系統(tǒng)系統(tǒng)使用者選擇算法排序演示顯示代碼圖7.4系統(tǒng)體系結(jié)構(gòu)圖用戶界面設(shè)計(jì)本系統(tǒng)功能簡(jiǎn)單,沒(méi)有高復(fù)雜性。只要求能夠使用戶選擇排序算法和將最終的排序演示和排序算法的代碼顯示出來(lái),需要用戶操作的只有選擇排序算法,之后就可看到結(jié)果。本系統(tǒng)只要有供選擇排序算法的按鈕就行了圖7.5系統(tǒng)界面圖7.2類設(shè)計(jì)在分析模型中找出的類有如下特點(diǎn):〔1〕該類是根據(jù)系統(tǒng)所具備的功能得到的比擬理想的類?!?〕類中的屬性和操作也只是實(shí)現(xiàn)系統(tǒng)功能的主要的一局部。〔3〕類之間的聯(lián)系比擬模糊不利于實(shí)際中編碼。針對(duì)這些特點(diǎn)本節(jié)繼續(xù)對(duì)分析模型找到的類進(jìn)行優(yōu)化以使利于編碼。1.對(duì)類編碼化對(duì)分析模型中到的和前一節(jié)中增添的類進(jìn)行程序化。①排序演示類〔SortCartoonDemo〕屬性:Button//排序算法按鈕名操作:kuaiShuSort()//顯示演示過(guò)程maoPaoSort() duiSort() zhiJieChaRuSort() shellSort() zhiJieXuanZheSort() guiBingRort() jiShuSort()ScoreTextArea.insert〔string,sp〕//顯示排序算法代碼2.優(yōu)化類聯(lián)系由于本系統(tǒng)只有一個(gè)類,所以不存在類聯(lián)系。3.類描述⑴排序演示類publicclassSortCartoonDemoextendsJFrame{privateJButtonkuaisuButton;//快速排序按鈕 privateJButtonmaoPaoButton;//冒泡排序按鈕 privateJButtonduiButton;//堆排序按鈕 privateJButtonzhiJieChaRuButton;//直接插入排序按鈕 privateJButtonshellButton;//希爾排序按鈕 privateJButtonzhiJieXuanZheButton;//直接選擇排序按鈕 privateJButtonguiBingButton;//歸并排序按鈕 privateJButtonjiShuButton;//基數(shù)排序按鈕privateTextAreaScoreTextArea;//顯示各種排序算法代碼的顯示框privatevoidkuaiShuSort();privatevoidmaoPaoSort()privatevoidduiSort()privatevoidzhiJieChaRuSort()privatevoidshellSort()privatevoidzhiJieXuanZheSort()privatevoidguiBingSort()privatevoidjiShuSort()}第8章系統(tǒng)測(cè)試8.1測(cè)試環(huán)境軟件測(cè)試環(huán)境:WindowsXP操作系統(tǒng),編程工具選用JDK6硬件測(cè)試環(huán)境:內(nèi)存要求在512M及其以上奔騰系列機(jī)8.2用戶界面測(cè)試用戶界面是用戶和系統(tǒng)的接口,一個(gè)好的用戶界面不僅要求能夠方便用戶使用而且美觀。所以用戶界面測(cè)試的主要任務(wù)是測(cè)試用戶界面是否友好,界面上的各個(gè)控件是否好用。啟動(dòng)應(yīng)用程序,選擇一個(gè)排序算法對(duì)界面進(jìn)行測(cè)試,測(cè)試發(fā)現(xiàn)界面未發(fā)現(xiàn)不友好現(xiàn)象。8.1系統(tǒng)測(cè)試圖〔一〕第9章系統(tǒng)使用及說(shuō)明本系統(tǒng)使用說(shuō)明如下:1.啟動(dòng)應(yīng)用程序,會(huì)出現(xiàn)如下系統(tǒng)界面9.1系統(tǒng)說(shuō)明圖〔一〕2.按下八個(gè)排序算法按鈕中的一個(gè)。9.2系統(tǒng)說(shuō)明圖〔二〕3.顯示數(shù)據(jù)在該排序算法下的排序演示和該排序算法的代碼。9.3系統(tǒng)說(shuō)明圖〔三〕4.關(guān)閉窗口9.4系統(tǒng)說(shuō)明圖〔四〕結(jié)束語(yǔ)排序算法是計(jì)算機(jī)科學(xué)中一個(gè)重要的局部,掌握好它對(duì)以后的學(xué)習(xí)有很大的幫助。大學(xué)期間只學(xué)習(xí)了幾種根本的排序算法,還有更多的排序算法需要學(xué)習(xí)。通過(guò)此次畢業(yè)設(shè)計(jì),第一使我進(jìn)一步學(xué)習(xí)了排序算法。了解到排序算法應(yīng)用廣泛。及排序技術(shù)在現(xiàn)實(shí)生活中的重要性。第二使我感到自己知識(shí)的缺乏,Java中有很多東西,自己只略懂皮毛,尤其對(duì)于線程方面的知識(shí)很缺乏。還有就是發(fā)現(xiàn)軟件工程學(xué)得很差,很多地方感到無(wú)從下手。第三使我意識(shí)到做事情要認(rèn)真,要堅(jiān)持。由于疏忽和馬虎浪費(fèi)了很多時(shí)間。開(kāi)始做的時(shí)候遇到了一些困難,我放棄了,中間有好長(zhǎng)一段時(shí)間沒(méi)理它。如果堅(jiān)持一下,可能很快就會(huì)解決。最后我要感謝我的指導(dǎo)老師,在做畢業(yè)設(shè)計(jì)的過(guò)程中不僅給我提供了珍貴的資料和還給我提供了很多指導(dǎo)和建議,使我能夠順利的完成畢業(yè)設(shè)計(jì)。參考文獻(xiàn)[1]朱戰(zhàn)立.數(shù)據(jù)結(jié)構(gòu)使用C語(yǔ)言[M].〔第三版〕.西安:西安交通大學(xué)出版社,2004.234-257[2]BruceEckel.Java編程思想[M].〔第四版〕.北京:機(jī)械工業(yè)出版社,2007.6.669-672[3]IanSommerville.軟件工程[M].[4]王克宏、董麗、朱家維.Java技術(shù)及其應(yīng)用[M].〔第一版〕.北京:高等教育出版社,1999.125-138[5]張海藩.軟件工程導(dǎo)論[M].〔第三版〕.北京:清華大學(xué)出版社,1998.38-41[6]MarkAllenWeiss.數(shù)據(jù)結(jié)構(gòu)與算法分析[M].〔第二版〕 .北京:機(jī)械工業(yè)出版社,2021.3.183-195[7]張曜、張青、郭立山.Java程序設(shè)計(jì)教程[M].〔第一版〕.北京:清華大學(xué)出版社,2002.11.38-41[8]JamesCohoon、JacketDavidson.Java程序設(shè)計(jì)[M].〔第一版〕.北京:清華大學(xué)出版社[9]HerbertSchildtJava實(shí)用教程[M].〔第四版〕.北京:清華大學(xué)出版社[10]宋雨、趙文清.軟件工程[M].〔第一版〕.北京:中國(guó)電力出版社,2007.182-198附錄代碼清單

packageSortCartoonDemo;importjava.awt.*;importjava.awt.event.*;importjavax.swing.*;publicclassSortCartoonDemo007extendsJFrame{ privatePanelpanel; privateJLabel[]n; privateJLabel[]ppnumber; privateJTextFieldinputField; privateJTextFieldchoice; privateJLabelselect; privateJButtonkuaisuButton;//快速排序按鈕 privateJButtonmaoPaoButton;//冒泡排序按鈕 privateJButtonduiButton;//堆排序按鈕 privateJButtonzhiJieChaRuButton;//直接插入排序按鈕 privateJButtonshellButton;//希爾排序按鈕 privateJButtonzhiJieXuanZheButton;//直接選擇排序按鈕 privateJButtonguiBingButton;//歸并排序按鈕 privateJButtonjiShuButton;//基數(shù)排序按鈕 privateTextAreaScoreTextArea;//顯示各種排序算法代碼的顯示框 publicSortCartoonDemo007(){ Containercontainer=getContentPane(); container.setLayout(null); panel=newPanel(); this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); this.setSize(900,700); this.setLocationRelativeTo(null); this.setResizable(false); this.setAlwaysOnTop(true); JLabell=newJLabel("輸入12個(gè)數(shù)據(jù),只能輸入2組:"); select=newJLabel("選擇一種排序方法"); kuaisuButton=newJButton("1快速排序"); maoPaoButton=newJButton("2冒泡排序"); duiButton=newJButton("3堆排序"); zhiJieChaRuButton=newJButton("4直接插入排序"); shellButton=newJButton("5希爾排序"); zhiJieXuanZheButton=newJButton("6直接選擇排序"); guiBingButton=newJButton("7歸并排序"); jiShuButton=newJButton("8基數(shù)排序"); ScoreTextArea=newTextArea(); ScoreTextArea.setBounds(300,150,680,500); //各種排序算法代碼: finalStringkuaisuString="http://快速排序"+"\n"+ "voidQuickSort(DataTypea[],intlow,inthigh)"+"\n"+ "http://用遞歸方法對(duì)數(shù)據(jù)元素a[low]--a[high]進(jìn)行快速排序"+"\n"+ "{"+"\n"+ "inti=low,j=high;"+"\n"+ "DataTypetemp=a[low];//取第一個(gè)元素為標(biāo)準(zhǔn)數(shù)據(jù)元素"+"\n"+ "while(i<j)"+"\n"+ "{"+"\n"+ "while(i<j&&temp.key<=a[j].key)j--;//在數(shù)組的右端掃描"+"\n"+ "if(i<j)"+"\n"+ "{"+"\n"+ "a[i]=a[j];"+"\n"+ " i++;"+"\n"+ "}"+"\n"+ "while(i<j&&a[i].key<temp.key)i++;//在數(shù)組的左端掃描"+"\n"+ "if(i<j)"+"\n"+ "{"+"\n"+ "a[j]=a[i];"+"\n"+ " j--;"+"\n"+ "}"+"\n"+ "}"+"\n"+ "a[i]=temp;"+"\n"+ "if(low<i)QuickSort(a,low,i-1);//對(duì)左端子集合進(jìn)行遞歸"+"\n"+ "if(j<high)QuickSort(a,j+1,high);//對(duì)右端子集合進(jìn)行遞歸"+"\n"+ "}"; finalStringmaoPaoString="http://冒泡排序"+"\n"+ "voidBubbleSort(DataTypea[],intn)"+"\n"+ "{ "+"\n"+ " inti,j,flag=1;"+"\n"+ " DataTypetemp;"+"\n"+ " for(i=1;i<n&&flag==1;i++)"+"\n"+ " {"+"\n"+ " flag=0;"+"\n"+ " for(j=0;j<n-i;j++)//j<n-i控制內(nèi)部循環(huán)次數(shù)"+"\n"+ " {"+"\n"+ " if(a[j].key>a[j+1].key)"+"\n"+ " {"+"\n"+ " flag=1;//交換那么flag=1"+"\n"+ " temp=a[j];"+"\n"+ " a[j]=a[j+1];"+"\n"+ " a[j+1]=temp;"+"\n"+ " }"+"\n"+ " }"+"\n"+ " }"+"\n"+ "}"; finalStringduiString="voidCreatHeap(DataTypea[],intn,inth)//創(chuàng)立堆"+"\n"+ "{"+"\n"+ " inti,j,flag;"+"\n"+ " DataTypetemp;"+"\n"+ " i=h;//i為要建堆的二叉樹(shù)根結(jié)點(diǎn)下標(biāo)"+"\n"+ " j=2*i+1;//j為i的左孩子結(jié)點(diǎn)的下標(biāo)"+"\n"+ " temp=a[i];"+"\n"+ " flag=0;"+"\n"+ " while(j<n&&flag!=1)//沿左右孩子中值較大者重復(fù)向下篩選"+"\n"+ " {"+"\n"+ " if(j<n-1&&a[j].key<a[j+1].key)j++;//尋找左右孩子結(jié)點(diǎn)中的較大者,j為其下標(biāo)"+"\n"+ " if(temp.key>a[j].key)//a[i].key>a[j].key"+"\n"+ " flag=1;//標(biāo)記結(jié)束篩選條件"+"\n"+ " else{//否那么把a(bǔ)[j]上移"+"\n"+ " a[i]=a[j];"+"\n"+ " i=j;"+"\n"+ " j=2*i+1;"+"\n"+ " }"+"\n"+ " }"+"\n"+ " a[i]=temp;//把最初的a[i]賦予最后的a[j]"+"\n"+ "}"+"\n"+ "\n"+ "http://初始化創(chuàng)立最大堆"+"\n"+ "voidInitCreatHeap(DataTypea[],intn)"+"\n"+ "{"+"\n"+ " inti;"+"\n"+ " for(i=(n-1)/2;i>=0;i--)"+"\n"+ " CreatHeap(a,n,i);"+"\n"+ "}"+"\n"+ "\n"+ "http://堆排序"+"\n"+ "voidHeapSort(DataTypea[],intn)"+"\n"+ "{"+"\n"+ " inti;"+"\n"+ " DataTypetemp;"+"\n"+ " InitCreatHeap(a,n);//初始化創(chuàng)立最大堆"+"\n"+ "for(i=n-1;i>0;i--)//當(dāng)前最大堆個(gè)數(shù)每次遞減1"+"\n"+ " { //把堆頂a[0]元素與當(dāng)前最大堆的最后一個(gè)元素交換"+"\n"+ " temp=a[0];"+"\n"+ " a[0]=a[i];"+"\n"+ " a[i]=temp;"+"\n"+ " CreatHeap(a,i,0);//調(diào)整根結(jié)點(diǎn)滿足最大堆"+"\n"+ " }"+"\n"+ "}"; finalStringzhiJieChaRuString="http://直接插入排序"+"\n"+ "voidInsertSort(DataTypea[],intn)"+"\n"+ "{"+"\n"+ "inti,j;"+"\n"+ "DataTypetemp;"+"\n"+ "for(i=0;i<n-1;i++)"+"\n"+ " {"+"\n"+ " temp=a[i+1];"+"\n"+ " j=i;"+"\n"+ " while(j>-1&&temp.key<a[j].key)"+"\n"+ " {"+"\n"+ " a[j+1]=a[j];"+"\n"+ " j--;"+"\n"+ " }"+"\n"+ " a[j+1]=temp;"+"\n"+ " }"+"\n"+ "}"; finalStringshellString="http://希爾排序"+"\n"+ "voidShellSort(DataTypea[],intn,intd[],intnumOfD)"+"\n"+ "http://對(duì)元素a[0]--a[n-1]排序,d[0]--d[numOfD-1]為希爾增量值."+"\n"+ "{"+"\n"+ "inti,j,k,m,span;"+"\n"+ "DataTypetemp;"+"\n"+ "for(m=0;m<numOfD;m++)//共numOfD次循環(huán)"+"\n"+ "{"+"\n"+ " span=d[m];//取本次的增量值"+"\n"+ " for(k=0;k<span;k++)//共span個(gè)小組"+"\n"+ " {//組內(nèi)是直接插入排序,區(qū)別是每次不是增1而是增span."+"\n"+" for(i=k;i<n-span;i=i+span)"+"\n"+ " {"+"\n"+ " temp=a[i+span];"+"\n"+ " j=i;"+"\n"+ " while(j>-1&&temp.key<=a[j].key)"+"\n"+ " {"+"\n"+ " a[j+span]=a[j];"+"\n"+ " j=j-span;"+"\n"+ " }"+"\n"+ " a[j+span]=temp;"+"\n"+ " }"+"\n"+ " }"+"\n"+ "}"+"\n"+ "}"; finalStringzhiJieXuanZheString="http://直接選擇排序"+"\n"+ "voidSelectSort(DataTypea[],intn)"+"\n"+ "{"+"\n"+ "inti,j,small;"+"\n"+ "DataTypetemp;"+"\n"+ "for(i=0;i<n-1;i++)"+"\n"+ "{"+"\n"+ " small=i;//設(shè)第i個(gè)數(shù)據(jù)元素關(guān)鍵字最小"+"\n"+ " for(j=i+1;j<n;j++)//尋找關(guān)鍵字最小的數(shù)據(jù)元素"+"\n"+ " {"+"\n"+ " if(a[j].key<a[small].key)small=j;//記住最小元素的下標(biāo)"+"\n"+ " if(small!=i)//當(dāng)最小元素的下標(biāo)不為i時(shí)交換位置"+"\n"+ " {"+"\n"+ " temp=a[j];"+"\n"+ " a[i]=a[small];"+"\n"+ " a[small]=temp;"+"\n"+ " }"+"\n"+ " }"+"\n"+ "}"+"\n"+ "}"; finalStringbingGuiString="voidMerge(DataTypea[],intn,DataTypeswap[],intk)//一次二路歸并排序"+"\n"+ "http://k為有序子數(shù)組的長(zhǎng)度,一次二路歸并排序后的有序子序列存于數(shù)組swap中."+"\n"+ "{"+"\n"+ " intm=0,u1,L2,i,j,u2;"+"\n"+ " intL1=0;//第一個(gè)有序子數(shù)組下界為0."+"\n"+ " while(L1+k<=n-1)"+"\n"+ " {"+"\n"+ " L2=L1+k;//計(jì)算第二個(gè)有序在數(shù)組下界."+"\n"+ " u1=L2-1;//計(jì)算第一個(gè)有序在數(shù)組上界."+"\n"+ " u2=(L2+k-1<=n-1)?L2+k-1:n-1;//計(jì)算第二個(gè)有序在數(shù)組上界."+"\n"+ " for(i=L1,j=L2;i<=u1&&j<=u2;m++)//兩個(gè)有序子數(shù)組合并."+"\n"+ " {"+"\n"+ " if(a[i].key<=a[j].key)"+"\n"+ " {"+"\n"+ " swap[m]=a[i];"+"\n"+ " i++;"+"\n"+ " }"+"\n"+ " else{"+"\n"+ " swap[m]=a[j];"+"\n"+ " j++;"+"\n"+ " }"+"\n"+ " }"+"\n"+"http://子數(shù)組2已歸并完,將子數(shù)組1中剩余的元素存放到數(shù)組swap中."+"\n"+ " while(i<=u1)"+"\n"+ " {"+"\n"+ " swap[m]=a[i];"+"\n"+ " m++;"+"\n"+ " i++;"+"\n"+ " }"+"\n"+"http://子數(shù)組1已歸并完,將子數(shù)組2中剩余的元素存放到數(shù)組swap中."+"\n"+ " while(j<=u2)"+"\n"+ " {"+"\n"+ " swap[m]=a[j];"+"\n"+ " m++;"+"\n"+ " j++;"+"\n"+ " }"+"\n"+ " L1=u2+1;"+"\n"+ " }"+"\n"+" //將原始數(shù)組中只夠一組的數(shù)據(jù)元素順序存放到數(shù)組swap中."+"\n"+ " for(i=L1;i<n;i++,m++)swap[m]=a[i];"+"\n"+ "}"+"\n"+ "\n"+ "http://二路歸并排序"+"\n"+ "voidMergesort(DataTypea[],intn)"+"\n"+ "{"+"\n"+ "inti,k=1;//歸并長(zhǎng)度從1開(kāi)始."+"\n"+ "DataTypeswap[]=newDataType[n];//swap為動(dòng)態(tài)數(shù)組.!!!!!!!!!!!!!!!!!!"+"\n"+ "while(k<n)"+"\n"+ "{"+ " Merge(a,n,swap,k);//調(diào)用歸并函數(shù)Merge(a,n,swap,k)"+"\n"+ " for(i=0;i<n;i++)"+"\n"+ " a[i]=swap[i];//將元素從臨時(shí)數(shù)組swap放回?cái)?shù)組a中."+"\n"+ " k=2*k;//歸并長(zhǎng)度加倍"+"\n"+ " }"+"\n"+ "}"; finalStringjiShuString="http://基數(shù)排序:"+"\n"+ "#include<stdio.h>"+"\n"+ "#include<stdlib.h>"+"\n"+ "intmain(void)"+"\n"+ "{"+"\n"+ " intdata[10]={614,738,921,485,637,101,215,530,790,306};"+"\n"+//1,34,04,68,00,84,42,13,06,26 " inttemp[10][10]={0};"+"\n"+ " intorder[10]={0};"+"\n"+ " inti,j,k,n,lsd;"+"\n"+ " k=0;n=1;"+"\n"+ " while(n<=10)"+"\n"+ " {"+"\n"+ " for(i=0;i<10;i++)"+"\n"+ " {"+"\n"+ " lsd=((data[i]/n)%10);"+"\n"+ " temp[lsd][order[lsd]]=data[i];"+"\n"+ " order[lsd]++;"+"\n"+ " }"+"\n"+ " for(i=0;i<10;i++)"+"\n"+ " {"+"\n"+ " if(order[i]!=0)"+"\n"+ " for(j=0;j<order[i];j++)"+"\n"+ " {"+"\n"+ " data[k]=temp[i][j];"+"\n"+ " k++;"+"\n"+ " }"+"\n"+ " order[i]=0;"+"\n"+ " }"+"\n"+ " n*=10;"+"\n"+ " k=0;"+"\n"+ " }"+"\n"+ " return0;"+"\n"+ "}"; l.setBounds(10,18,180,20); add(l); inputField=newJTextField("614,738,921,485,637,101,215,530,790,306,354,891");//初始化待排序的數(shù)據(jù)。 inputField.setBounds(180,18,420,40); add(inputField); select.setBounds(20,130,150,30); add(select); kuaisuButton.setBounds(90,160,150,30); add(kuaisuButton); maoPaoButton.setBounds(90,200,150,30); add(maoPaoButton); duiButton.setBounds(90,240,150,30); add(duiButton); zhiJieChaRuButton.setBounds(90,280,150,30); add(zhiJieChaRuButton); shellButton.setBounds(90,320,150,30); add(shellButton); zhiJieXuanZheButton.setBounds(90,360,150,30); add(zhiJieXuanZheButton); guiBingButton.setBounds(90,400,150,30); add(guiBingButton); jiShuButton.setBounds(90,440,150,30); add(jiShuButton); choice=newJTextField(); setTitle("排序動(dòng)畫(huà)演示"); //快速排序按鈕事件處理 kuaisuButton.addActionListener(newActionListener(){ publicvoidactionPerformed(ActionEvente){ ScoreTextArea.insert(kuaisuString,0); add(ScoreTextArea); kuaiShuSort();}}); //冒泡排序按鈕事件處理 maoPaoButton.addActionListener(newActionListener(){ publicvoidactionPerformed(ActionEvente){ ScoreTextArea.insert(maoPaoString,0); add(ScoreTextArea); maoPaoSort();}}); //堆排序按鈕事件處理 duiButton.addActionListener(newActionListener(){ publicvoidactionPerformed(ActionEvente){ ScoreTextArea.insert(duiString,0); add(ScoreTextArea); duiSort();}}); //直接插入排序按鈕事件處理 zhiJieChaRuButton.addActionListener(newActionListener(){ publicvoidactionPerformed(ActionEvente){ ScoreTextArea.insert(zhiJieChaRuString,0); add(ScoreTextArea); zhiJieChaRuSort();}}); //希爾選擇排序按鈕事件處理 shellButton.addActionListener(newActionListener(){ publicvoidactionPerformed(ActionEvente){ ScoreTextArea.insert(shellString,0); add(ScoreTextArea); shellSort();}}); //直接選擇排序按鈕事件處理 zhiJieXuanZheButton.addActionListener(newActionListener(){ publicvoidactionPerformed(ActionEvente){ ScoreTextArea.insert(zhiJieXuanZheString,0); add(ScoreTextArea); zhiJieXuanZheSort();}}); //并歸排序按鈕事件處理 guiBingButton.addActionListener(newActionListener(){ publicvoidactionPerformed(ActionEvente){ ScoreTextArea.insert(bingGuiString,0); add(ScoreTextArea); guiBingSort();}}); //基數(shù)排序按鈕事件處理 jiShuButton.addActionListener(newActionListener(){ publicvoidactionPerformed(ActionEvente){ ScoreTextArea.insert(jiShuString,0); add(ScoreTextArea); jiShuSort();}}); //設(shè)置待排序數(shù)據(jù)的屬性。 n=newJLabel[12]; ppnumber=newJLabel[n.length]; for(inti=0;i<n.length;i++){ n[i]=newJLabel(); n[i].setFont(newFont("",Font.BOLD,14)); n[i].setForeground(Color.gray); n[i].setHorizontalAlignment(JLabel.CENTER); add(n[i]); } for(inti=0;i<n.length;i++){ ppnumber[i]=newJLabel(); ppnumber[i].setFont(newFont("",Font.BOLD,14)); ppnumber[i].setForeground(Color.gray); ppnumber[i].setHorizontalAlignment(JLabel.CENTER); add(ppnumber[i]); } container.add(panel); setResizable(false);//設(shè)置此窗體不可由用戶調(diào)整大小 setVisible(true); } //快速排序移動(dòng): privatevoidkuaiShuSort(){ try{ Stringsrc=inputField.getText(); src=src.replaceAll("[^0-9,]",""); String[]sp=src.split(","); finalint[]v=newint[sp.length]; intleft=0,w=40,offx=0,offy=95; for(inti=0;i<n.length;i++)n[i].setText(null); for(inti=0;i<sp.length;i++){ n[i].setText(sp[i]); v[i]=Integer.valueOf(sp[i]); n[i].setSize(w,20); n[i].setLocation((left+=w)+offx,offy); } newThread(){ publicvoidrun(){ kuaisuButton.setEnabled(false); s(500); try{ QuickSort(n,0,n.length-1); }catch(Exceptione){} kuaisuButton.setEnabled(true); } voidQuickSort(JLabel[]a,intlow,inthigh){ inti=low,j=high; JLabelL=a[low]; while(i<j){ while(i<j&&v[low]<=v[j]) j--; if(i<j){ i-=i==0?1:2; i++; } while(i<j&&v[i]<v[j]) i++; if(i<j){ JLabelLL=a[i]; a[i]=a[j]; a[j]=LL; a[i].setForeground(Color.blue); for(intk=0;k<7;k++){ a[i].setVisible(k%2==0); s(123); } swap(a[i],a[j]); a[i].setForeground(Color.gray); v[i]+=v[j]; v[j]=v[i]-v[j]; v[i]-=v[j]; j--; } } a[i]=L; i-=i==0?1:2; if(low<i) QuickSort(a,low,i-1); if(j<high) QuickSort(a,j+1,high); } privatevoidsort2(){thrownewUnsupportedOperationException("Notyetimplemented");}privatevoidswap(JLabela,JLabelb){ JLabelt=a; a=b; b=t; Pointpa=a.getLocation(); Pointpb=b.getLocation(); intx1,x2,y1,y2; x1=pa.x; x2=pb.x; y1=pa.y; y2=pb.y; intdelay=10; while(x1<(x1+x2)/2){ a.setLocation(++x1,y1++); b.setLocation(--x2,y2--); s(delay); } while(x1<pb.x){ a.setLocation(++x1,y1--); b.setLocation(--x2,y2++); s(delay); } a.setLocation(pb); b.setLocation(pa);}privatevoids(inti){ try{ sleep(i); }catch(Exceptione){}} }.start(); }catch(Exceptione){e.printStackTrace();setTitle("請(qǐng)檢查輸入的數(shù)據(jù),只能輸入2組!");} } //冒泡排序移動(dòng): privatevoidmaoPaoSort(){ try{ Stringsrc=inputField.getText(); src=src.replaceAll("[^0-9,]",""); String[]sp=src.split(","); finalint[]v=newint[sp.length]; intleft=0,w=40,offx=0,offy=95; for(inti=0;i<n.length;i++)n[i].setText(null); for(inti=0;i<sp.length;i++){ n[i].setText(sp[i]); v[i]=Integer.valueOf(sp[i]); n[i].setSize(w,20); n[i].setLocation((left+=w)+offx,offy); } newThread(){ publicvoidrun(){ maoPaoButton.setEnabled(false); s(500); try{ intflag=1; for(inti=1;i<n.length&&flag==1;i++){ flag=0; for(intj=0;j<n.length-i;j++){ if(v[j]>v[j+1]){ flag=1; JLabell=n[j]; n[j]=n[j+1]; n[j+1]=l; n[j].setForeground(Color.blue); for(intk=0;k<7;k++){ n[j].setVisible(k%2==0); s(123); } swap(n[j],n[j+1]); n[j].setForeground(Color.gray); v[j]+=v[j+1]; v[j+1]=v[j]-v[j+1]; v[j]-=v[j+1]; j-=j==0?1:0; } } } }catch(Exceptione){} maoPaoButton.setEnabled(true); } privatevoidsort2(){ thrownewUnsupportedOperationException("Notyetimplemented"); } privatevoidswap(JLabela,JLabelb){ JLabelt=a; a=b; b=t; Pointpa=a.getLocation(); Pointpb=b.getLocation(); intx1,x2,y1,y2; x1=pa.x; x2=pb.x; y1=pa.y; y2=pb.y; intdelay=10; while(x1<(x1+x2)/2){ a.setLocation(++x1,y1++); b.setLocation(--x2,y2--); s(delay); } while(x1<pb.x){ a.setLocation(++x1,y1--); b.setLocation(--x2,y2++); s(delay); } a.setLocation(pb); b.setLocation(pa); } privatevoids(inti){ try{ sleep(i); }catch(Exceptione){} } }.start(); }catch(Exceptione){e.printStackTrace();setTitle("請(qǐng)檢查輸入的數(shù)據(jù),只能輸入2組!");} }

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論