版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
獨創(chuàng)性聲明本人鄭重聲明:所呈交的畢業(yè)論文〔設(shè)計〕是本人在指導(dǎo)老師指導(dǎo)下取得的研究成果。除了文中特別加以注釋和致謝的地方外,論文〔設(shè)計〕中不包含其他人已經(jīng)發(fā)表或撰寫的研究成果。與本研究成果相關(guān)的所有人所做出的任何奉獻均已在論文〔設(shè)計〕中作了明確的說明并表示了謝意。簽名:年月日授權(quán)聲明本人完全了解****有關(guān)保存、使用本科生畢業(yè)論文〔設(shè)計〕的規(guī)定,即:有權(quán)保存并向國家有關(guān)部門或機構(gòu)送交畢業(yè)論文〔設(shè)計〕的復(fù)印件和磁盤,允許畢業(yè)論文〔設(shè)計〕被查閱和借閱。本人授權(quán)許昌學(xué)院可以將畢業(yè)論文〔設(shè)計〕的全部或局部內(nèi)容編入有關(guān)數(shù)據(jù)庫進行檢索,可以采用影印、縮印或掃描等復(fù)制手段保存、匯編論文〔設(shè)計〕。本人論文〔設(shè)計〕中有原創(chuàng)性數(shù)據(jù)需要保密的局部為〔如沒有,請?zhí)顚憽盁o〞〕:簽名:年月日指導(dǎo)教師簽名:年月日摘要 排序在人們的日常生活和學(xué)習(xí)、科研、生產(chǎn)等各個方面有著重要的應(yīng)用。因此掌握常用的排序算法是很必要的。本系統(tǒng)采用java2SE為開發(fā)工具,實現(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工程簡介 1工程開發(fā)的意義 11.2系統(tǒng)需求描述 1功能需求 11.3系統(tǒng)環(huán)境設(shè)計 2硬件環(huán)境 2軟件環(huán)境 2系統(tǒng)接口 22系統(tǒng)陳述 32.1系統(tǒng)范圍 32.2用例分析 3識別參與者 3識別用例 4構(gòu)建用例圖 3細化用例圖 43構(gòu)建類模型 53.1確定類 5尋找類 5篩選類 5準備數(shù)據(jù)字典 53.2確定屬性 53.4繼承分析 63.5構(gòu)建系統(tǒng)包圖 64狀態(tài)模型 74.1確定狀態(tài) 74.2構(gòu)建事件跟蹤圖 7準備交互式腳本 7確定事件 8事件跟蹤圖 84.3構(gòu)建狀態(tài)圖 95交互模型 105.1構(gòu)建順序模型 10準備場景 10順序圖 105.2構(gòu)建活動模型 11確定活動 11活動圖 126定義效勞 136.1效勞分析 136.2系統(tǒng)最終類圖 147系統(tǒng)實現(xiàn) 147.1系統(tǒng)設(shè)計 14優(yōu)化分析模型 14系統(tǒng)體系結(jié)構(gòu)設(shè)計 16用戶界面設(shè)計 167.2類設(shè)計 178系統(tǒng)測試 188.1測試環(huán)境 188.2用戶界面測試 189系統(tǒng)使用及說明 19結(jié)束語 21參考文獻 21附錄 23謝辭 54排序算法動畫演示系統(tǒng)第1章系統(tǒng)概述1.1工程概述工程簡介排序在人們的日常生活和學(xué)習(xí)、科研、生產(chǎn)等各個方面有著重要的應(yīng)用。因此掌握常用的排序算法是很必要的。此次畢業(yè)設(shè)計擬開發(fā)一個排序算法動畫演示系統(tǒng),以提高對排序算法的掌握程度。本系統(tǒng)實現(xiàn)八種不同排序算法即:快速排序、冒泡排序、堆排序、直接插入排序、希爾排序、直接選擇排序、歸并排序、基數(shù)排序的排序演示。用戶可以選擇排序算法以演示輸入數(shù)據(jù)在該排序算法下的排序過程。工程開發(fā)的意義 隨著計算機技術(shù)的開展,各種排序算法不斷的被提出。排序算法在計算機科學(xué)中有非常重要的意義,且應(yīng)用很廣泛。在以后的開展中排序?qū)ξ覀兊膶W(xué)習(xí)和生活的影響會逐漸增大,很有必要學(xué)習(xí)排序知識。因此此次畢業(yè)設(shè)計一方面使自己掌握排序的知識,另一方面鍛煉一下獨立開發(fā)系統(tǒng)的能力。1.2系統(tǒng)需求描述1.2.1 排序算法動畫演示系統(tǒng)排序算法動畫演示系統(tǒng)快速排序演示排序演示顯示代碼冒泡排序演示堆排序演示直接插入排序演示希爾排序演示直接選擇排序演示歸并排序演示基數(shù)排序演示輸入數(shù)據(jù)圖1.1系統(tǒng)功能圖1〕排序算法演示處理 排序算法演示模塊能夠根據(jù)用戶選擇的排序算法對數(shù)據(jù)進行排序,動態(tài)的顯示出排序過程。2〕代碼顯示 用于顯示用戶選擇的排序算法的代碼。1.3系統(tǒng)環(huán)境設(shè)計硬件環(huán)境A.一臺奔騰系列微機B.內(nèi)存要求在512M及其以上C.光柵顯示器或液晶顯示器或等離子顯示器一臺軟件環(huán)境A.Windows2000或WindowsXP及其以上操作系統(tǒng)B.安裝有JDK6及其以上開發(fā)包系統(tǒng)接口本系統(tǒng)要求有JDK6及其以上開發(fā)包就行,所以在實現(xiàn)上不是很復(fù)雜不需要什么系統(tǒng)接口。第2章系統(tǒng)陳述2.1系統(tǒng)范圍 對于排序算法演示,本系統(tǒng)用用戶輸入的數(shù)據(jù)進行各種排序,并顯示各排序算法的代碼。2.2用例分析識別參與者參與者就是系統(tǒng)在執(zhí)行的過程中不可缺少的且與系統(tǒng)有交互行為的外部實體、對象或系統(tǒng)。1.用戶翻開系統(tǒng)界面進行想要的操作或不進行任何操作。2.用戶輸入數(shù)據(jù)。3.用戶可以從界面上選擇所要進行排序演示。4.系統(tǒng)將數(shù)據(jù)的排序演示過程和用戶所選的排序算法的代碼呈現(xiàn)給用戶。5.系統(tǒng)退出。經(jīng)過上述分析,發(fā)現(xiàn)系統(tǒng)在執(zhí)行的過程中只有兩個參與者,它們是用戶和界面。圖2.1顯示了這兩個參與者。用戶用戶界面圖2.1參與者識別用例用例是系統(tǒng)執(zhí)行的外部可見的產(chǎn)生對參與者有價值結(jié)果的動作序列?;趩栴}陳述給出以下分析并從中發(fā)現(xiàn)系統(tǒng)用例。1.使用者翻開系統(tǒng)界面,輸入數(shù)據(jù)并從中選擇排序算法。2.系統(tǒng)顯示相應(yīng)排序演示操作并顯示相應(yīng)排序算法的代碼。從上述分析中我們可以初步識別出系統(tǒng)用例:輸入數(shù)據(jù)、選擇排序算法、排序演示、顯示代碼,圖2.2給出了這四個用例。選擇排序算法選擇排序算法排序演示代碼輸入數(shù)據(jù)圖2.2系統(tǒng)用例2.2.3用戶排序算法演示用戶排序算法演示用戶輸入數(shù)據(jù)輸入數(shù)據(jù)處理數(shù)據(jù)處理數(shù)據(jù)圖2.3系統(tǒng)用例圖〔一〕細化用例圖將用例細化可得到分解的用例:將“排序演示〞用例分解為:A:選擇排序算法從界面上選擇要進行排序的排序算法B:確定數(shù)據(jù)移動順序根據(jù)選擇的排序算法確定數(shù)據(jù)移動順序C:演示排序過程顯示選擇的排序算法對輸入數(shù)據(jù)的排序過程和排序算法代碼用戶用戶界面排序算法演示提供提供顯示排序算法代碼排序演示選擇排序算法輸入數(shù)據(jù)提供圖2.4系統(tǒng)用例圖〔二〕Extend第3章構(gòu)建類模型Extend3.1確定類尋找類根據(jù)名詞識別法從需求陳述中獲取如下類與對象:系統(tǒng)界面輸入數(shù)據(jù)數(shù)據(jù)排序代碼排序演示算法演示過程用戶代碼。篩選類1.無關(guān)刪除本系統(tǒng)進行特征提取只關(guān)心數(shù)據(jù)、算法、排序代碼、算法演示過程等處理過程,其它的都不是本系統(tǒng)關(guān)心的。在上面獲取的對象中‘系統(tǒng)’和‘用戶’和本系統(tǒng)內(nèi)部處理無關(guān),所以需要刪除。2.與實現(xiàn)相關(guān)的刪除用戶輸入的數(shù)據(jù),并不能作為一個獨立的類進行操作,所以需要刪除。3.重復(fù)刪除排序代碼和代碼在此都表示排序算法代碼,所以刪除排序代碼。4.最終確定的類經(jīng)過以上幾步的篩選且由于功能簡單確定為一個類:排序演示。準備數(shù)據(jù)字典上一步確定了一個類,對這個類進行介紹:排序演示:該類主要是呈現(xiàn)給用戶的圖像界面,把數(shù)據(jù)排序的演示過程和排序算法的代碼呈現(xiàn)給用戶。3.2確定屬性屬性是對象或類的數(shù)值特性及對象或類的性質(zhì),借助屬性能夠?qū)ο蠛皖惖慕Y(jié)構(gòu)有更清晰的認識,以下來分析本系統(tǒng)所屬類的屬性。本系統(tǒng)有一個類:排序演示。根據(jù)問題陳述,首先要的把本系統(tǒng)所具有的功能呈現(xiàn)給用戶,其次需要用戶選擇排序算法,把輸入的數(shù)據(jù)按照選擇的排序算法得到的排序過程和排序代碼顯示給用戶。具有的屬性為排序算法名〔即用戶選擇的排序算法的名字,由用戶按按鈕獲得〕。所以屬性可以說是排序算法選擇按鈕。其次在演示過程用于對數(shù)據(jù)進行排序,確定數(shù)據(jù)移動的順序,具有的屬性為:速度。顯示用戶選擇的排序算法的代碼。具有的屬性為:排序算法名〔同上〕。所以排序演示類具有的屬性為:排序算法選擇按鈕、速度。經(jīng)過上述分析給出帶有屬性的類圖:導(dǎo)出導(dǎo)出使用演示過程排序算法名速度圖3.2含屬性的類圖3.4繼承分析在本系統(tǒng)中有一個類:排序演示類。所以本系統(tǒng)不存在泛化關(guān)系。3.5構(gòu)建系統(tǒng)包圖包是將有著公共主題的一組元素,本系統(tǒng)含有一個類。所以將本系統(tǒng)的類為一個包:排序演示包。圖3.3顯示了本系統(tǒng)的包圖。排序過程排序過程圖3.3系統(tǒng)包圖圖3.4描述了排序演示包的構(gòu)成。排序演示包構(gòu)成演示過程演示過程排序算法名速度圖3.4演示過程包的構(gòu)成第4章狀態(tài)模型4.1確定狀態(tài)狀態(tài)是對象的生命周期中的一個條件或狀況,在此期間對象將滿足某些條件、執(zhí)行某些活動或等待某些事件。當(dāng)用戶啟動本系統(tǒng)的界面時系統(tǒng)開始運行,經(jīng)過顯示排序過程和顯示排序算法的代碼結(jié)束本次處理。在這個過程中具有多個狀態(tài),首先用戶需要啟動界面,接著接受用戶輸入的數(shù)據(jù),接受用戶的選擇,然后顯示排序過程和排序算法的代碼,下一次開始或結(jié)束。排序演示類有如下狀態(tài):開始〔用戶啟動界面〕,運行狀態(tài)〔接受用戶輸入、選擇開始處理〕結(jié)束狀態(tài)〔傳遞處理結(jié)果〕。4.2構(gòu)建事件跟蹤圖準備交互式腳本腳本是指系統(tǒng)在某一次執(zhí)行期間出現(xiàn)的一系列事件,即序列事件。每當(dāng)系統(tǒng)進行一次執(zhí)行時系統(tǒng)中對象與外界用戶交換信息即產(chǎn)生一個事件開始,繼而產(chǎn)生一系列事件觸發(fā)整個過程的執(zhí)行直到結(jié)束。系統(tǒng)一次執(zhí)行過程中的正常腳本:1.用戶啟動系統(tǒng)界面2.系統(tǒng)界面要求用戶輸入待排序的數(shù)據(jù)3.系統(tǒng)界面接受用戶輸入的數(shù)據(jù)4.系統(tǒng)界面要求用戶選擇排序算法5.系統(tǒng)界面接受用戶選擇的排序算法,并傳遞排序算法名進行處理6.系統(tǒng)界面接受處理結(jié)果7.系統(tǒng)界面顯示演示過程和用戶選擇的排序算法的代碼8.下一次運行或系統(tǒng)退出系統(tǒng)一次執(zhí)行過程中的異常腳本:1.用戶啟動系統(tǒng)界面2.系統(tǒng)界面要求用戶輸入數(shù)據(jù)3.系統(tǒng)界面要求用戶選擇排序算法4.系統(tǒng)界面結(jié)束用戶選擇排序算法5.系統(tǒng)界面確認出錯,系統(tǒng)內(nèi)部處理出錯6.系統(tǒng)界面取消此次操作7.系統(tǒng)界面請求用戶輸入數(shù)據(jù)8.系統(tǒng)界面請求選擇排序算法確定事件根據(jù)腳本確定如下事件:啟動界面、要求輸入、要求選擇、接受選擇、傳遞排序算法名、接受處理結(jié)果、顯示演示過程和用戶選擇的排序算法的代碼、等待下一次運行或系統(tǒng)退出等。事件跟蹤圖從上一節(jié)中找出了該系統(tǒng)在一次執(zhí)行過程中的所發(fā)生的事件,和這些事件相關(guān)的對象為用戶、界面、演示過程、代碼等。那么此節(jié)的事件跟蹤圖就是把這些事件和相應(yīng)的對象清晰的表示出來,豎線代表對象,箭頭代表發(fā)生的事件。事件跟蹤圖如圖4.1所示:用戶用戶界面演示過程類果傳輸結(jié)果出入輸入圖4.1系統(tǒng)事件跟蹤圖4.3構(gòu)建狀態(tài)圖下面給出了排序演示類的狀態(tài)圖:接受退出顯示處理接受輸入圖4.2排序演示類的狀態(tài)圖第5章交互模型本章主要用順序圖、活動圖來描述交互模型。順序圖顯示交互的對象和交互的時間順序,而活動圖顯示計算的處理步驟之間的控制流。5.1構(gòu)建順序模型順序建模用于描述對象之間的動態(tài)交互關(guān)系,著重表達了對象間消息傳遞的時間順序。順序模型包括倆局部:一是場景的準備,二是構(gòu)建順序圖。準備場景場景包含對象之間的消息以及對象所執(zhí)行的活動,每條消息把信息從一個對象傳遞到另一個對象。以下是本系統(tǒng)的一個與實際用戶交互的場景:1.某一用戶啟動系統(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é)果顯示出來,并呈現(xiàn)給用戶9.系統(tǒng)等待下一次運行或關(guān)閉界面10.用戶關(guān)閉界面11.系統(tǒng)退出順序圖順序圖描述了對象隨時間的推移相互之間交互信息的過程,其中顯示的對象沿豎軸排列,而交互的信息沿水平軸按時間的順序排序。用戶用戶界面演示過程圖5.1系統(tǒng)順序圖5.2構(gòu)建活動模型確定活動一個活動是一個狀態(tài)機中進行的非原子的執(zhí)行單元,活動的執(zhí)行最終會演化成一系列獨立的動作的執(zhí)行。而每個動作的執(zhí)行將會改變系統(tǒng)的狀態(tài)和消息的傳遞。一個動作可以調(diào)用另一個動作,同時也可以發(fā)送一個信號。以下是本系統(tǒng)某一次執(zhí)行過程,可以從中活動系統(tǒng)一次執(zhí)行過程中的活動。1.用戶要求進行排序算法演示并顯示排序代碼2.用戶需要啟動系統(tǒng)3.用戶輸入數(shù)據(jù)4.用戶選擇排序算法5.系統(tǒng)對數(shù)據(jù)進行排序處理6.系統(tǒng)對數(shù)據(jù)進行移動處理7.系統(tǒng)對排序算法進行顯示處理8.系統(tǒng)顯示排序演示過程和排序算法的代碼9.系統(tǒng)等待下一次運行或此次處理結(jié)束,活動終止活動圖活動圖主要用于描述系統(tǒng)在一次執(zhí)行過程中各種活動的執(zhí)行順序,即描述一個操作中的所要進行的各種活動的執(zhí)行流程。一個活動圖一般包括動作、活動節(jié)點、流和對象值。圖5.2給出了本系統(tǒng)在一次執(zhí)行過程的活動圖。戶結(jié)束圖5.2系統(tǒng)活動圖第6章定義效勞在第三章中的類模型無法完全確定各個類的效勞,而建立的狀態(tài)模型和交互模型之后,才能最終確定效勞,因為這兩個模型確定了系統(tǒng)各類應(yīng)具有的效勞。6.1效勞分析確定效勞需要從兩個方面進行:一是類實體的常規(guī)行為,二是系統(tǒng)中特殊需要的行為。1.常規(guī)行為直接從類中導(dǎo)出操作,一般類都定義了屬性,而每個屬性都是可以被訪問的,即每個含有屬性的類應(yīng)該定義能夠訪問該類屬性的效勞。排序演示類含有兩個屬性,定義訪問排序算法名和數(shù)據(jù)移動的速度的效勞。2.從狀態(tài)模型中導(dǎo)出操作第四章確定了如下事件:要求輸入、接受輸入、要求選擇、接受選擇、傳遞排序算法名、接受處理結(jié)果、顯示演示過程和排序算法的代碼、系統(tǒng)退出。我們可以從中導(dǎo)出如下效勞:選擇排序算法、傳遞排序算法名、顯示演示過程和排序算法的代碼、系統(tǒng)退出等效勞。3.從交互模型中導(dǎo)出操作順序圖描述了對象之間動態(tài)的交互關(guān)系,并且描述了這些對象隨時間的推移相互之間交互信息的過程。對象之間的交互信息必須啟動相應(yīng)的操作來完成。我們可以從順序圖得出如下效勞:顯示界面、輸入數(shù)據(jù)、選擇排序算法、傳遞排序算法名、顯示演示過程和排序算法的代碼、關(guān)閉界面等。我們從活動圖中可得到如下操作:輸入數(shù)據(jù)、選擇排序算法、對數(shù)據(jù)進行排序處理、對數(shù)據(jù)進行移動處理、排序算法進行顯示處理、顯示排序演示過程、顯示排序算法的代碼。4.確定效勞從上面得出了兩個效勞,因為速度效勞可以用休眠時間控制,經(jīng)過對得到的效勞進行篩選和合并相同效勞,得出如下最終效勞:獲得排序算法名,即獲得用戶選擇的按鈕。6.2系統(tǒng)最終類圖經(jīng)過以上分析我們得出了類以及類的屬性和操作,下面對各類進行描述和建立含屬性、操作的類圖。(1)類描述1.排序演示類屬性:排序算法選擇按鈕效勞:獲得排序算法名、顯示排序演示過程、顯示排序算法代碼作用:接受用戶選擇的排序算法名、使數(shù)據(jù)移動、顯示排序演示過程、顯示排序算法代碼等。(2)最終類圖導(dǎo)出導(dǎo)出演示過程排序算法名速度輸入數(shù)據(jù)圖6.1最終類圖第7章系統(tǒng)實現(xiàn)在分析階段已經(jīng)明確系統(tǒng)應(yīng)該做那些內(nèi)容,本章系統(tǒng)實現(xiàn)就是把系統(tǒng)應(yīng)該做的事情轉(zhuǎn)變成系統(tǒng)的實現(xiàn)方案。7.1系統(tǒng)設(shè)計優(yōu)化分析模型本系統(tǒng)的功能就是將用戶輸入的數(shù)據(jù)在用戶選擇的排序算法下的排序過程經(jīng)過一系列的處理最后將得到的排序演示和排序算法的代碼顯示給用戶。所以可以將本系統(tǒng)劃分為四個子系統(tǒng):輸入子系統(tǒng)、選擇子系統(tǒng)、處理子系統(tǒng)和顯示子系統(tǒng)。輸入子系統(tǒng)主要實現(xiàn)待排序數(shù)據(jù)的輸入、選擇子系統(tǒng)主要實現(xiàn)排序算法的選擇;處理子系統(tǒng)主要是處理數(shù)據(jù)排序、數(shù)據(jù)移動處理等;顯示子系統(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ù)據(jù);選擇子系統(tǒng)主要是當(dāng)用戶選擇排序算法時接受選擇;處理子系統(tǒng)主要使數(shù)據(jù)的移動和排序算法的代碼顯示出來;顯示子系統(tǒng)將得到的排序演示過程和排序算法的代碼顯示出來。圖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è)計本系統(tǒng)經(jīng)過用戶選擇排序算法開始執(zhí)行,只能由用戶激發(fā)系統(tǒng)開始執(zhí)行,一次只能處理一種排序算法演示,一次處理完成之后,然后系統(tǒng)將處理的結(jié)果反應(yīng)給用戶。由用戶和系統(tǒng)交互來支配系統(tǒng)的運行。下列圖給出了本系統(tǒng)的交互圖:系統(tǒng)系統(tǒng)使用者選擇算法排序演示顯示代碼圖7.4系統(tǒng)體系結(jié)構(gòu)圖用戶界面設(shè)計本系統(tǒng)功能簡單,沒有高復(fù)雜性。只要求能夠使用戶選擇排序算法和將最終的排序演示和排序算法的代碼顯示出來,需要用戶操作的只有選擇排序算法,之后就可看到結(jié)果。本系統(tǒng)只要有供選擇排序算法的按鈕就行了圖7.5系統(tǒng)界面圖7.2類設(shè)計在分析模型中找出的類有如下特點:〔1〕該類是根據(jù)系統(tǒng)所具備的功能得到的比擬理想的類?!?〕類中的屬性和操作也只是實現(xiàn)系統(tǒng)功能的主要的一局部?!?〕類之間的聯(lián)系比擬模糊不利于實際中編碼。針對這些特點本節(jié)繼續(xù)對分析模型找到的類進行優(yōu)化以使利于編碼。1.對類編碼化對分析模型中到的和前一節(jié)中增添的類進行程序化。①排序演示類〔SortCartoonDemo〕屬性:Button//排序算法按鈕名操作:kuaiShuSort()//顯示演示過程maoPaoSort() duiSort() zhiJieChaRuSort() shellSort() zhiJieXuanZheSort() guiBingRort() jiShuSort()ScoreTextArea.insert〔string,sp〕//顯示排序算法代碼2.優(yōu)化類聯(lián)系由于本系統(tǒng)只有一個類,所以不存在類聯(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)測試8.1測試環(huán)境軟件測試環(huán)境:WindowsXP操作系統(tǒng),編程工具選用JDK6硬件測試環(huán)境:內(nèi)存要求在512M及其以上奔騰系列機8.2用戶界面測試用戶界面是用戶和系統(tǒng)的接口,一個好的用戶界面不僅要求能夠方便用戶使用而且美觀。所以用戶界面測試的主要任務(wù)是測試用戶界面是否友好,界面上的各個控件是否好用。啟動應(yīng)用程序,選擇一個排序算法對界面進行測試,測試發(fā)現(xiàn)界面未發(fā)現(xiàn)不友好現(xiàn)象。8.1系統(tǒng)測試圖〔一〕第9章系統(tǒng)使用及說明本系統(tǒng)使用說明如下:1.啟動應(yīng)用程序,會出現(xiàn)如下系統(tǒng)界面9.1系統(tǒng)說明圖〔一〕2.按下八個排序算法按鈕中的一個。9.2系統(tǒng)說明圖〔二〕3.顯示數(shù)據(jù)在該排序算法下的排序演示和該排序算法的代碼。9.3系統(tǒng)說明圖〔三〕4.關(guān)閉窗口9.4系統(tǒng)說明圖〔四〕結(jié)束語排序算法是計算機科學(xué)中一個重要的局部,掌握好它對以后的學(xué)習(xí)有很大的幫助。大學(xué)期間只學(xué)習(xí)了幾種根本的排序算法,還有更多的排序算法需要學(xué)習(xí)。通過此次畢業(yè)設(shè)計,第一使我進一步學(xué)習(xí)了排序算法。了解到排序算法應(yīng)用廣泛。及排序技術(shù)在現(xiàn)實生活中的重要性。第二使我感到自己知識的缺乏,Java中有很多東西,自己只略懂皮毛,尤其對于線程方面的知識很缺乏。還有就是發(fā)現(xiàn)軟件工程學(xué)得很差,很多地方感到無從下手。第三使我意識到做事情要認真,要堅持。由于疏忽和馬虎浪費了很多時間。開始做的時候遇到了一些困難,我放棄了,中間有好長一段時間沒理它。如果堅持一下,可能很快就會解決。最后我要感謝我的指導(dǎo)老師,在做畢業(yè)設(shè)計的過程中不僅給我提供了珍貴的資料和還給我提供了很多指導(dǎo)和建議,使我能夠順利的完成畢業(yè)設(shè)計。參考文獻[1]朱戰(zhàn)立.數(shù)據(jù)結(jié)構(gòu)使用C語言[M].〔第三版〕.西安:西安交通大學(xué)出版社,2004.234-257[2]BruceEckel.Java編程思想[M].〔第四版〕.北京:機械工業(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].〔第二版〕 .北京:機械工業(yè)出版社,2021.3.183-195[7]張曜、張青、郭立山.Java程序設(shè)計教程[M].〔第一版〕.北京:清華大學(xué)出版社,2002.11.38-41[8]JamesCohoon、JacketDavidson.Java程序設(shè)計[M].〔第一版〕.北京:清華大學(xué)出版社[9]HerbertSchildtJava實用教程[M].〔第四版〕.北京:清華大學(xué)出版社[10]宋雨、趙文清.軟件工程[M].〔第一版〕.北京:中國電力出版社,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個數(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://用遞歸方法對數(shù)據(jù)元素a[low]--a[high]進行快速排序"+"\n"+ "{"+"\n"+ "inti=low,j=high;"+"\n"+ "DataTypetemp=a[low];//取第一個元素為標準數(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);//對左端子集合進行遞歸"+"\n"+ "if(j<high)QuickSort(a,j+1,high);//對右端子集合進行遞歸"+"\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為要建堆的二叉樹根結(jié)點下標"+"\n"+ " j=2*i+1;//j為i的左孩子結(jié)點的下標"+"\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é)點中的較大者,j為其下標"+"\n"+ " if(temp.key>a[j].key)//a[i].key>a[j].key"+"\n"+ " flag=1;//標記結(jié)束篩選條件"+"\n"+ " else{//否那么把a[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)前最大堆個數(shù)每次遞減1"+"\n"+ " { //把堆頂a[0]元素與當(dāng)前最大堆的最后一個元素交換"+"\n"+ " temp=a[0];"+"\n"+ " a[0]=a[i];"+"\n"+ " a[i]=temp;"+"\n"+ " CreatHeap(a,i,0);//調(diào)整根結(jié)點滿足最大堆"+"\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://對元素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個小組"+"\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個數(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;//記住最小元素的下標"+"\n"+ " if(small!=i)//當(dāng)最小元素的下標不為i時交換位置"+"\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ù)組的長度,一次二路歸并排序后的有序子序列存于數(shù)組swap中."+"\n"+ "{"+"\n"+ " intm=0,u1,L2,i,j,u2;"+"\n"+ " intL1=0;//第一個有序子數(shù)組下界為0."+"\n"+ " while(L1+k<=n-1)"+"\n"+ " {"+"\n"+ " L2=L1+k;//計算第二個有序在數(shù)組下界."+"\n"+ " u1=L2-1;//計算第一個有序在數(shù)組上界."+"\n"+ " u2=(L2+k-1<=n-1)?L2+k-1:n-1;//計算第二個有序在數(shù)組上界."+"\n"+ " for(i=L1,j=L2;i<=u1&&j<=u2;m++)//兩個有序子數(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;//歸并長度從1開始."+"\n"+ "DataTypeswap[]=newDataType[n];//swap為動態(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ù)組swap放回數(shù)組a中."+"\n"+ " k=2*k;//歸并長度加倍"+"\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("排序動畫演示"); //快速排序按鈕事件處理 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); } //快速排序移動: 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("請檢查輸入的數(shù)據(jù),只能輸入2組!");} } //冒泡排序移動: 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("請檢查輸入的數(shù)據(jù),只能輸入2組!");} }
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025至2031年中國點火開關(guān)總成行業(yè)投資前景及策略咨詢研究報告
- 2025-2030全球商用光觸媒電子滅蚊燈行業(yè)調(diào)研及趨勢分析報告
- 2025年全球及中國陽極磷銅球行業(yè)頭部企業(yè)市場占有率及排名調(diào)研報告
- 2025-2030全球手持式激光焊接機冷水機行業(yè)調(diào)研及趨勢分析報告
- 2025-2030全球把握膠帶行業(yè)調(diào)研及趨勢分析報告
- 2025至2031年中國下水褲子行業(yè)投資前景及策略咨詢研究報告
- 2025至2030年中國鍍金嗩吶數(shù)據(jù)監(jiān)測研究報告
- 二零二五年度小規(guī)格紙張印刷服務(wù)合同3篇
- 2025至2030年中國白瓦楞盒數(shù)據(jù)監(jiān)測研究報告
- 2025至2030年中國水冷型發(fā)動機數(shù)據(jù)監(jiān)測研究報告
- 第三單元名著導(dǎo)讀《經(jīng)典常談》知識清單 統(tǒng)編版語文八年級下冊
- 第十七章-阿法芙·I·梅勒斯的轉(zhuǎn)變理論
- 焊接機器人在汽車制造中應(yīng)用案例分析報告
- 合成生物學(xué)在生物技術(shù)中的應(yīng)用
- 中醫(yī)門診病歷
- 廣西華銀鋁業(yè)財務(wù)分析報告
- 無違法犯罪記錄證明申請表(個人)
- 大學(xué)生勞動教育PPT完整全套教學(xué)課件
- 繼電保護原理應(yīng)用及配置課件
- 《殺死一只知更鳥》讀書分享PPT
- 蓋洛普Q12解讀和實施完整版
評論
0/150
提交評論