版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、java 的常見排序方法java 的常見排序方法復制代碼 代碼如下:package com.test; import java.util.Random;/*排序測試類*排序算法的分類如下: (序、希爾排序); (冒泡泡排序、快速排序);(直接選擇排序、堆排序); .歸并排序; 序。*關(guān)于排序方法的選擇: )若 n 較小(如 n50),可采用直接插入或直接選擇排序。的記錄數(shù)少于直接插人,應選直接選擇排序為宜。(2或隨機的快速排序為宜;)若 n 較大,則應采用時間復雜度為O(nlgn)的排序方法:快速排序、堆排序或歸并排序。*/public class Sort /*初始化測試數(shù)組的方法*retu
2、rn*/public int createArray() Random random = new Random(); int array = new int10;for (int i = 0; i 10; i+) arrayi = random.nextInt(100) - random.nextInt(100);/ 生 成兩個隨機數(shù)相減,保證生成的數(shù)中有負數(shù)System.out.println(=);printArray(array); return array;/*打印數(shù)組中的元素到控制臺*param source*/public void printArray(int data) for
3、 (int i : data) System.out.print(i + );System.out.println();/*交換數(shù)組中指定的兩元素的位置*param dataparam xparam y*/原始序列private void swap(int data, int x, int y) int temp = datax;datax = datay; datay = temp;/*冒泡排序交換排序的一種循環(huán)就將最大元素排在最后(如從小到大排序),下一次循環(huán)是將其 他的數(shù)進行類似操作。* 性能:比較次數(shù) O(n2),n2/2;交換次數(shù) O(n2),n2/4*param data要排序的數(shù)
4、組param sortType排序類型return*/public void bubbleSort(int data, String sortType) if (sortType.equals(asc) / 正排序,從小排到大/ 比較的輪數(shù)for (int i = 1; i data.length; i+) / 將相鄰兩個數(shù)進行比較,較大的數(shù)往后冒泡for (int j = 0; j dataj + 1) / 交換相鄰兩個數(shù)swap(data, j, j + 1); else if (sortType.equals(desc) / 倒排序,從大排到小/ 比較的輪數(shù)for (int i = 1;
5、 i data.length; i+) / 將相鄰兩個數(shù)進行比較,較大的數(shù)往后冒泡for (int j = 0; j data.length - i; j+) if (dataj dataj + 1) / 交換相鄰兩個數(shù)swap(data, j, j + 1); else System.out.println(您輸入的排序類型錯誤!);printArray(data);/ 輸出冒泡排序后的數(shù)組值/*直接選擇排序法選擇排序的一種方法:每一趟從待排序的數(shù)據(jù)元素中選出最?。ɑ蜃畲螅┰兀?順序放在已排好序的數(shù)列的最后,直到全部待排序的數(shù)據(jù)元素排完。* 性能:比較次數(shù) O(n2),n2/2O(n),n
6、交換次數(shù)比冒泡排序少多了,由于交換所需 CPU 時間比比較所CUP但是N 比較大時,比較所需的 CPU的性能和冒泡排序差不太多,但毫無疑問肯定要快些。*param data要排序的數(shù)組param sortType排序類型return*/public void selectSort(int data, String sortType) if (sortType.equals(asc) / 正排序,從小排到大int index;for (int i = 1; i data.length; i+) index = 0;for (int j = 1; j dataindex)index = j;/ 交
7、換在位置 data.length-i 和 index(最大值)兩個數(shù)swap(data, data.length - i, index); else if (sortType.equals(desc) / 倒排序,從大排到小int index;for (int i = 1; i data.length; i+) index = 0;for (int j = 1; j = data.length - i; j+) if (data j dataindex)index = j;/ 交換在位置 data.length-i 和 index(最大值)兩個數(shù)swap(data, data.length -
8、 i, index); else System.out.println(您輸入的排序類型錯誤!);printArray(data);/ 輸出直接選擇排序后的數(shù)組值/*插入排序*方法:將一個記錄插入到已排好序的有序表(有可能是空表)1* 性能:比較次數(shù) O(n2),n2/4O(n),n2/4比較次數(shù)是前兩者的一般,而復制所需的 CPU所以性能上比冒泡排序提高一倍多,而比選擇排序也要快。*param data要排序的數(shù)組param sortType排序類型*/public void Sort(int data, String sortType) if (sortType.equals(asc) /
9、 正排序,從小排到大/ 比較的輪數(shù)for (int i = 1; i data.length; i+) / 保證前 i+1 個數(shù)排好序for (int j = 0; j datai) / 交換在位置j 和iswap(data, i, j); else if (sortType.equals(desc) / 倒排序,從大排到小/ 比較的輪數(shù)for (int i = 1; i data.length; i+) / 保證前 i+1 個數(shù)排好序for (int j = 0; j i; j+) if (data j datai) / 交換在位置j 和iswap(data, i, j); else Sys
10、tem.out.println(您輸入的排序類型錯誤!);printArray(data);/ 輸出插入排序后的數(shù)組值/*反轉(zhuǎn)數(shù)組的方法*param data源數(shù)組*/public void reverse(int data) int length = data.length;int temp = 0;/ 臨時變量for (int i = 0; i length / 2; i+) temp = datai;datai = datalength - 1 - i; datalength - 1 - i = temp;printArray(data);/ 輸出到轉(zhuǎn)后數(shù)組的值/*快速排序*快速排序使用
11、分治法(Divide and conquer)策略來把一個序列(list)分為兩個子序列。*步驟為:1(pivot),2.元素比基準值大的擺在基準的后面(相同的數(shù)可以到任一邊)。在這 個分割之后,該基準是它的最后位置。這個稱為分割( partition)操作。3. 遞歸地(recursive)把小于基準值元素的子數(shù)列和大于基準值元素的子數(shù)列排序。*遞回的最底部情形,是數(shù)列的大小是零或一,也就是永遠都已經(jīng)被排序好了。雖然一直遞回下去,但是這個算法總會結(jié)束,因為在每 次的迭代( iteration)中,它至少會把一個元素擺到它最后的位置去。*param data待排序的數(shù)組param lowpar
12、am highsee SortTest#qsort(int, int, int)see SortTest#qsort_desc(int, int, int)*/public void quickSort(int data, String sortType) if (sortType.equals(asc) / 正排序,從小排到大qsort_data, 0, data.length - 1); else if (sortType.equals(desc) / 倒排序,從大排到小qsort_desc(data, 0, data.length - 1); else System.out.printl
13、n(您輸入的排序類型錯誤!);/*快速排序的具體實現(xiàn),排正序*param dataparam lowparam high*/private void qsort_int data, int low, int high) int i, j, x;if (low high) / 這個條件用來結(jié)束遞歸 i = low;j = high;x = datai; while (i j) while (i x)j-; / 從右向左找第一個小于x 的數(shù)if (i j) datai = data j; i+;while (i j & datai x) i+; / 從左向右找第一個大于x 的數(shù)if (i j) d
14、ata j = datai; j-;datai = x; qsort_data, low, i - 1);qsort_data, i + 1, high);/*快速排序的具體實現(xiàn),排倒序*param dataparam lowparam high*/private void qsort_desc(int data, int low, int high) int i, j, x;if (low high) / 這個條件用來結(jié)束遞歸i = low; j = x = datai; while (i j) while (i j & data j x)j-; / 從右向左找第一個小于x 的數(shù)if (i
15、j) datai = data j; i+;while (i x) i+; / 從左向右找第一個大于x 的數(shù)if (i 1; mid= (low + high)/ / 2,但是效率會高些if (data datasetendIndex | beginIndex endIndex)return -1;if (data datasetmidIndex) return binarySearch(dataset, data, midIndex + 1, endIndex); else return midIndex;/*查找線性表必須是有序列表*paramdatasetparamdatareturni
16、ndex*/public int binarySearch(int dataset, int data) int beginIndex = 0;int endIndex = dataset.length - 1; int midIndex = -1;if (data datasetendIndex | beginIndex endIndex)return -1;while (beginIndex 1; / 相 當 于midIndex =/ (beginIndex +/ endIndex) / 2,但是效率會高些if (data datasetmidIndex) beginIndex = mid
17、Index + 1; else return midIndex;return -1;public static void main(String args) Sort sortTest = new Sort();int array = sortTest.createArray(); System.out.println(= 冒泡排序后(序)=);sortTest.bubbleSort(array, asc);System.out.println(=冒泡排序后(倒序)=);sortTest.bubbleSort(array, desc);array = sortTest.createArray(
18、);System.out.println(=倒轉(zhuǎn)數(shù)組后=);sortTest.reverse(array);array = sortTest.createArray();System.out.println(=選擇排序后(正序)=);sortTest.selectSort(array, asc);System.out.println(=選擇排序后(倒序)=);sortTest.selectSort(array, desc);array = sortTest.createArray();System.out.println(=插入排序后(正序)=);sortTest.Sort(array, asc);System.out.println(=插入排序后(倒序)=);sortTest.Sort(array, desc);array = sortTest.createArray();System.out.p
溫馨提示
- 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. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 酒店集團財務制度
- 村集體建立相關(guān)財務制度
- 甘肅省社會團體財務制度
- 街道辦事處健全財務制度
- 小企業(yè)公司內(nèi)部財務制度
- 雙簽字雙負責財務制度
- 農(nóng)村公廁管護制度
- 醫(yī)院出入人員管理制度范本(3篇)
- 標點地產(chǎn)策劃活動方案(3篇)
- 常熟裝修施工方案(3篇)
- 2026年科技型中小企業(yè)評價入庫代理合同
- 亞馬遜招商策劃方案
- 《JBT 6695-1993 汽輪機潤滑油系統(tǒng) 技術(shù)條件》(2026年)實施指南
- 雨課堂學堂云在線《天網(wǎng)追兇》單元測試考核答案
- 充電樁銷售合同范本
- 行業(yè)協(xié)會成立及運營管理模板
- 2025年及未來5年中國金屬鎂行業(yè)市場供需格局及行業(yè)前景展望報告
- 水磨鉆施工專項施工方案
- 000現(xiàn)行有效的國鐵集團技術(shù)標準目錄(截止2024-12-31、共1240項)
- 小學科學實驗課程活動設(shè)計
- 大體積混凝土施工裂縫防治技術(shù)研究
評論
0/150
提交評論