基于JAVA实现的排序算法总结
生活随笔
收集整理的這篇文章主要介紹了
基于JAVA实现的排序算法总结
小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
常用的排序方法有:冒泡排序、快速排序、選擇排序、插入排序、歸并排序,除此之外,還有基數(shù)排序、雞尾酒排序、桶排序、鴿巢排序、希爾排序等,這里著重介紹下前半段列舉的幾種常見方法的實(shí)現(xiàn)。
1. 冒泡排序法:
/** 1.比較相鄰元素:如果第一個(gè)比第二個(gè)大,就交換* 2.對(duì)每一對(duì)相鄰元素作同樣的工作,從開始第一對(duì)到結(jié)尾的最后一對(duì)* 3.針對(duì)所有的元素重復(fù)以上的步驟,除了最后一個(gè)*/ public class Bubble {public static int[] sort(int[] data){int temp;int size = data.length;for(int i=0;i<size-1;i++){for(int j=i+1;j<size;j++){if(data[i] > data[j]){temp = data[i];data[i] = data[j];data[j] = temp;}}}return data;} }2. 快速排序法:
/** 1.從數(shù)列中挑出一個(gè)基準(zhǔn)值* 2.重新排序數(shù)列,比基準(zhǔn)值小的元素放在基準(zhǔn)前,比基準(zhǔn)值大的放在基準(zhǔn)后,相同的可放到任一邊* 3.遞歸進(jìn)行如上操作*/ public class Quick {public static int[] sort(int[] data, int start, int end){if(start < end){int base = data[start];int temp;int i=start,j=end;do {while ((data[i] < base) && (i < end))i++;while ((data[j] > base) && (j > start))j--;if(i <= j){temp = data[i];data[i] = data[j];data[j] = temp;i++;j--;}}while (i<=j);if(start < j){sort(data,start,j);}if(end > i){sort(data,i,end);}}return data;} }3. 選擇排序法:每次尋找序列中的最小值,然后放在最末尾的位置。
/**1.在未排序序列中找到最小元素,存放到排序序列的起始位置*2.再?gòu)氖S辔磁判蛟刂欣^續(xù)尋找最小元素,然后放到排序序列末尾*3.以此類推,直到所有元素均排序完畢*/ public class Select {public static int[] sort(int[] data){int temp;int size = data.length;for (int i = 0; i < size; i++) {int k = i;for (int j = size - 1; j >i; j--) {if (data[j] < data[k])k = j;}temp = data[i];data[i] = data[k];data[k] = temp;}return data;} }4. 插入排序法:通過構(gòu)建有序序列,對(duì)于未排序數(shù)據(jù),在已排序序列中從后向前掃描,找到相應(yīng)位置并插入。
/** 1.從第一個(gè)元素開始,取出下一個(gè)元素,在已經(jīng)排序的元素序列中從后向前掃描,如果該元素(已排序)大于新元素,將該元素移到下一位置* 2.重復(fù)1,直到找到已排序的元素小于或者等于新元素的位置* 3.將新元素插入到該位置中* 4.重復(fù)步驟2-3*/ public class Insert {public static int[] sort(int[] data) {int size = data.length;int temp;int j;for (int i = 1; i < size; i++) {temp = data[i];for (j = i; j > 0 && temp < data[j - 1]; j--)data[j] = data[j - 1];data[j] = temp;}return data;} }5. 歸并排序法:
/** 1.申請(qǐng)空間,使其大小為兩個(gè)已經(jīng)排序序列之和,該空間用來存放合并后的序列* 2.設(shè)定兩個(gè)指針,最初位置分別為兩個(gè)已經(jīng)排序序列的起始位置* 3.比較兩個(gè)指針?biāo)赶虻脑?#xff0c;選擇相對(duì)小的元素放入到合并空間,并移動(dòng)指針到下一位置* 4.重復(fù)步驟3直到某一指針達(dá)到序列尾* 5.將另一序列剩下的所有元素直接復(fù)制到合并序列尾*/ public class Merge{public static int[] sort(int[] data,int left, int right){int t = 1;int size = right - left + 1;while (t < size) {int s = t;t = 2 * s;int i = left;while (i + (t - 1) < size) {merge(data, i, i + (s - 1), i + (t - 1));i += t;}if (i + (s - 1) < right)merge(data, i, i + (s - 1), right);}return data;}private static void merge(int[] data, int p, int q, int r) {int[] B = new int[data.length];int s = p;int t = q + 1;int k = p;while (s <= q && t <= r) {if (data[s] <= data[t]) {B[k] = data[s];s++;} else {B[k] = data[t];t++;}k++;}if (s == q + 1)B[k++] = data[t++];elseB[k++] = data[s++];for (int i = p; i <= r; i++)data[i] = B[i];} }6. 測(cè)試代碼:
public class SortMethodTest {public static void main(String[] args) {int[] data = new int[6];data[0] = 15;data[1] = 23;data[2] = 8;data[3] = 19;data[4] = 21;data[5] = 8;System.out.println("排序前:"+data[0]+","+data[1]+","+data[2]+","+data[3]+","+data[4]+","+data[5]);//冒泡法int [] afterBubbleSortedData = Bubble.sort(data);System.out.println("冒泡排序法排序后:"+afterBubbleSortedData[0]+","+afterBubbleSortedData[1]+","+afterBubbleSortedData[2]+","+afterBubbleSortedData[3]+","+afterBubbleSortedData[4]+","+afterBubbleSortedData[5]);//快速排序法int[] afterQuickSortedData = Quick.sort(data,0,4);System.out.println("快速排序法排序后:"+afterQuickSortedData[0]+","+afterQuickSortedData[1]+","+afterQuickSortedData[2]+","+afterQuickSortedData[3]+","+afterQuickSortedData[4]+","+afterQuickSortedData[5]);//選擇排序法int[] afterSelectSortedData = Select.sort(data);System.out.println("選擇排序法排序后:"+afterSelectSortedData[0]+","+afterSelectSortedData[1]+","+afterSelectSortedData[2]+","+afterSelectSortedData[3]+","+afterSelectSortedData[4]+","+afterSelectSortedData[5]);//插入排序法int[] afterInsertSortedData = Insert.sort(data);System.out.println("插入排序法排序后:"+afterInsertSortedData[0]+","+afterInsertSortedData[1]+","+afterInsertSortedData[2]+","+afterInsertSortedData[3]+","+afterInsertSortedData[4]+","+afterInsertSortedData[5]);//歸并排序法int[] afterMergeSortedData = Merge.sort(data,0,1);System.out.println("歸并排序法排序后:"+afterMergeSortedData[0]+","+afterMergeSortedData[1]+","+afterMergeSortedData[2]+","+afterMergeSortedData[3]+","+afterMergeSortedData[4]+","+afterMergeSortedData[5]);} }測(cè)試結(jié)果:
排序前:15,23,8,19,21,8
冒泡排序法排序后:8,8,15,19,21,23
快速排序法排序后:8,8,15,19,21,23
選擇排序法排序后:8,8,15,19,21,23
插入排序法排序后:8,8,15,19,21,23
歸并排序法排序后:8,8,15,19,21,23
?
轉(zhuǎn)自:http://www.cnblogs.com/sevenyuan/archive/2009/12/04/1616897.html
轉(zhuǎn)載于:https://www.cnblogs.com/hunterCecil/p/6574255.html
總結(jié)
以上是生活随笔為你收集整理的基于JAVA实现的排序算法总结的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Codeforces Round #40
- 下一篇: Tomcat源码调试环境搭建