




下載本文檔
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領
文檔簡介
1、importjava.util.Random;*排序算法的分類如下:*1.插入排序(直接插入排序、折半插入排序、希爾排序);*2.交換排序(冒泡泡排序、快速排序);*3.選擇排序(直接選擇排序、堆排序);*4.歸并排序;*5.基數(shù)排序。* 關(guān)于排序方法的選擇:* (1)若n較小(如n30),可采用直接插入或直接選擇排序。*當記錄規(guī)模較小時,直接插入排序較好;否則因為直接選擇移動的記錄數(shù)少于直接插人,應選直接選擇排序為宜。* (2)若文件初始狀態(tài)基本有序(指正序),則應選用直接插人、冒泡或隨機的快速排序為宜;* (3)若n較大,則應采用時間復雜度為O(nlgn)的排序方法:快速排序、堆排序或歸并
2、排序。*/publicclassSortTest/*初始化測試數(shù)組的方法* return一個初始化好的數(shù)組* /publicintcreateArray()Randomrandom=newRandom();intarray=newint10;for(inti=0;i0;i-)for(intj=0;jsourcej+1)swap(source,j,j+1);elseif(sortType.equals(desc)/倒排序,從大排到小for(inti=source.length-1;i0;i-)for(intj=0;ji;j+)if(sourcejsourcej+1)swap(source,j,j
3、+1);elseSystem.out.println(您輸入的排序類型錯誤!);printArray(source);/輸出冒泡排序后的數(shù)組值/*直接選擇排序法-選擇排序的一種*方法:每一趟從待排序的數(shù)據(jù)元素中選出最小(或最大)的一個元素,順序放在已排好序的數(shù)列的最后,直到全部待排序的數(shù)據(jù)元素排完。*性能:比較次數(shù)O(nA2),nA2/2*交換次數(shù)O(n),n*交換次數(shù)比冒泡排序少多了,由于交換所需CPU時間比比較所需的CUP時間多,所以選擇排序比冒泡排序快。*但是N比較大時,比較所需的CPU時間占主要地位,所以這時的性能和冒泡排序差不太多,但毫無疑問肯定要快些。* paramsource要排
4、序的數(shù)組* paramsortType排序類型* return* /publicvoidselectSort(intsource,StringsortType)if(sortType.equals(asc)/正排序,從小排到大for(inti=0;isource.length;i+)for(intj=i+1;jsourcej)swap(source,i,j);elseif(sortType.equals(desc)/倒排序,從大排到小for(inti=0;isource.length;i+)for(intj=i+1;jsource.length;j+)if(sourceisourcej)swa
5、p(source,i,j);elseSystem.out.println(您輸入的排序類型錯誤!);printArray(source);/輸出直接選擇排序后的數(shù)組值/*插入排序*方法:將一個記錄插入到已排好序的有序表(有可能是空表)中,從而得到一個新的記錄數(shù)增1的有序表。*性能:比較次數(shù)O(nA2),nA2/4*復制次數(shù)O(n),nA2/4*比較次數(shù)是前兩者的一般,而復制所需的CPU時間較交換少,所以性能上比冒泡排序提高一倍多,而比選擇排序也要快。* paramsource要排序的數(shù)組* paramsortType排序類型* /publicvoidinsertSort(intsource,S
6、tringsortType)if(sortType.equals(asc)/正排序,從小排到大for(inti=1;i0)&(sourcejsourcej-1);j-)swap(source,j,j-1);elseif(sortType.equals(desc)/倒排序,從大排到小for(inti=1;i0)&(sourcejsourcej-1);j-)swap(source,j,j-1);elseSystem.out.println(您輸入的排序類型錯誤!);printArray(source);/輸出插入排序后的數(shù)組值/*反轉(zhuǎn)數(shù)組的方法* paramsource源數(shù)組* /
7、publicvoidreverse(intsource)intlength=source.length;inttemp=0;臨時變量for(inti=0;ilength/2;i+)temp=sourcei;sourcei=sourcelength-1-i;sourcelength-1-i=temp;printArray(source);/輸出到轉(zhuǎn)后數(shù)組的值/*快速排序*快速排序使用分治法(Divideandconquer)策略來把一個序列(list)分為兩個子序列(sub-lists)。*步驟為:* 1.從數(shù)列中挑出一個元素,稱為“基準(pivot),* 2.重新排序數(shù)列,所有元素比基準值小的
8、擺放在基準前面,所有元素比基準值大的擺在基準的后面(相同的數(shù)可以到任一邊)。在這個分割之后,該基準是它的最后位置。這個稱為分割(partition)操作。* 3.遞歸地(recursive)把小于基準值元素的子數(shù)列和大于基準值元素的子數(shù)列排序。*遞回的最底部情形,是數(shù)列的大小是零或一,也就是永遠都已經(jīng)被排序好了。雖然一直遞回下去,但是這個算法總會結(jié)束,因為在每次的迭代(iteration)中,它至少會把一個元素擺到它最后的位置去。* paramsource待排序的數(shù)組* paramlow* paramhigh* seeSortTest#qsort(int,int,int)* seeSortTe
9、st#qsort_desc(int,int,int)* /publicvoidquickSort(intsource,StringsortType)if(sortType.equals(asc)/正排序,從小排到大qsort_asc(source,0,source.length-1);* elseif(sortType.equals(desc)/倒排序,從大排到小qsort_desc(source,0,source.length-1);* elseSystem.out.println(您輸入的排序類型錯誤!);快速排序的具體實現(xiàn),排正序paramsource/* paramlow* param
10、high* /privatevoidqsort_asc(intsource,intlow,inthigh)inti,j,x;if(lowhigh)/這個條件用來結(jié)束遞歸1=low;j=high;x=sourcei;while(ij)while(ix)j-;/從右向左找第一個小于x的數(shù)if(ij)sourcei=sourcej;i+;while(ij&sourceix)i+;從左向右找第一個大于x的數(shù)if(ij)sourcej=sourcei;j-;sourcei=x;qsort_asc(source,low,i-1);qsort_asc(source,i+1,high);/*快速排序的
11、具體實現(xiàn),排倒序* paramsource* paramlow* paramhigh* /privatevoidqsort_desc(intsource,intlow,inthigh)inti,j,x;if(lowhigh)/這個條件用來結(jié)束遞歸1=low;j=high;x=sourcei;while(ij)while(ij&sourcejx)j-;/從右向左找第一個小于x的數(shù)if(ij)sourcei=sourcej;i+;while(ix)i+;從左向右找第一個大于x的數(shù)if(ij)sourcej=sourcei;j-;sourcei=x;qsort_desc(source,low
12、,i-1);qsort_desc(source,i+1,high);/*二分法查找*查找線性表必須是有序列表* paramsource* paramkey* return* /publicintbinarySearch(intsource,intkey)intlow=0,high=source.length-1,mid;while(low1;/相當于mid=(low+high)/2,但是效if(key=sourcemid)returnmid;elseif(key=1;i-)for(intj=0;j=i-1;j+)if(pareTo(sj+1)0)Stringtemp=null;temp=sj;sj=sj+1;sj+1=temp;for(Stringa:s)System.out.print(a+);大家一起學習吧!!System.out.println(=sortTest.insertSort(array,asc);System.out.println(=sortTest.insertSort(array,desc);插入排序后(正序)=);插入排序后(倒序)=);array=sor
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 冷庫設備更新合同樣本
- 公司與個人合同標準文本
- 包工頭和工人簽合同樣本
- 包裝產(chǎn)品訂購合同樣本
- 農(nóng)村庫房施工合同標準文本
- 加州房子裝修合同范例
- 包家具裝修合同標準文本
- 農(nóng)場農(nóng)莊轉(zhuǎn)租合同標準文本
- 上海高空作業(yè)合同標準文本
- 辦公電器租賃合同樣本
- 氯乙酸安全技術(shù)說明書MSDS
- 2024年鄭州鐵路職業(yè)技術(shù)學院單招職業(yè)適應性測試題庫及答案解析
- 電廠機組UPS裝置安裝、調(diào)試項目“三措兩案”
- 2024年內(nèi)蒙古通遼新正電工技術(shù)服務有限公司招聘筆試參考題庫附帶答案詳解
- 基于單片機的汽車超載控制系統(tǒng)的設計
- 靜電噴涂設備操作規(guī)程
- 4-12現(xiàn)場鋼筋直螺紋加工質(zhì)量檢驗記錄
- 2023天地偉業(yè)安防產(chǎn)品技術(shù)參數(shù)和檢測報告
- 火龍罐聯(lián)合耳穴壓豆治療失眠個案護理
- 社會工作本科畢業(yè)論文2
- 冀教版數(shù)學四年級下冊《用字母表示數(shù)》專項訓練卷
評論
0/150
提交評論