java 比较算法_JAVA排序算法实现和比较:冒泡,桶,选择,快排,归并
一。冒泡排序:
實(shí)現(xiàn)思想:
重復(fù)地走訪過要排序的元素列,一次比較兩個(gè)相鄰的元素,如果他們的順序(如從大到小、首字母從A到Z)錯(cuò)誤就把他們交換過來。走訪元素的工作是重復(fù)地進(jìn)行直到?jīng)]有相鄰元素需要交換,也就是說該元素已經(jīng)排序完成。
代碼:
1 packageNumSort;2
3 //冒泡排序
4 public classBubbleSort {5 public static voidmain(String[] args){6 int num[] ={23,1,56,78,5,43,34,34,78,9,99};7 int n =num.length;8 inttemp;9 for(int i=0;inum[j+1]){12 temp = num[j+1];13 num[j+1] =num[j];14 num[j] =temp;15 }16 }17 }18 for(int i=0;i
二。桶排序:
實(shí)現(xiàn)思想:
桶排序 (Bucket sort)或所謂的箱排序,工作的原理是將數(shù)組分到有限數(shù)量的桶子里。每個(gè)桶子再個(gè)別排序。
代碼:
1 packageNumSort;2
3 //桶排序
4 public classBucketSort {5 public static voidmain(String[] args){6 int num[] ={23,1,56,78,5,43,34,34,78,9,99};7 int[] a = new int[100];8 for(int i=0;i<100;i++){9 a[i] = 0;10 }11 for(int i=0;i0){16 for(int j=0;j
三。選擇排序:
實(shí)現(xiàn)思想:
選擇排序(Selection sort)是一種簡(jiǎn)單直觀的排序算法。它的工作原理是每一次從待排序的數(shù)據(jù)元素中選出最小(或最大)的一個(gè)元素,存放在序列的起始位置,直到全部待排序的數(shù)據(jù)元素排完。 選擇排序是不穩(wěn)定的排序方法。
代碼:
1 packageNumSort;2
3 //選擇排序
4 public classSelectSort {5 public static voidmain(String[] args){6 int num[] ={23,1,56,78,5,43,34,34,78,9,99};7 int n =num.length;8 inttemp;9 for(int i=0;inum[j]){12 temp =num[i];13 num[i] =num[j];14 num[j] =temp;15 }16 }17 }18 for(int i=0;i
四??焖倥判?#xff1a;
實(shí)現(xiàn)思想:
通過一趟排序?qū)⒁判虻臄?shù)據(jù)分割成獨(dú)立的兩部分,其中一部分的所有數(shù)據(jù)都比另外一部分的所有數(shù)據(jù)都要小,然后再按此方法對(duì)這兩部分?jǐn)?shù)據(jù)分別進(jìn)行快速排序,整個(gè)排序過程可以遞歸進(jìn)行,以此達(dá)到整個(gè)數(shù)據(jù)變成有序序列。
代碼:
1 packageNumSort;2
3 importjava.util.Arrays;4
5 public classQuickSort2 {6 public static voidmain(String[] args){7 int num[] = {23,5,67,98,76,2,1,5,65,23,34};8 quickS(num,0,num.length-1);9 System.out.println(Arrays.toString(num));10 }11 public static void quickS(int num[],int left,intright){12 int i =left;13 int j =right;14 inttemp;15 int middle =num[left];16 if(left>=right){17 return;18 }19 while(i!=j){20 while(num[j]>middle&&i
五。歸并排序:
實(shí)現(xiàn)思想:
歸并排序(MERGE-SORT)是建立在歸并操作上的一種有效的排序算法,該算法是采用分治法(Divide and Conquer)的一個(gè)非常典型的應(yīng)用。將已有序的子序列合并,得到完全有序的序列;即先使每個(gè)子序列有序,再使子序列段間有序。若將兩個(gè)有序表合并成一個(gè)有序表,稱為二路歸并。
代碼:
1 packageNumSort;2
3 importjava.util.Arrays;4
5 public classMergeSort {6 public static voidmain(String[] args){7 int num[] = {34,5,23,123,8,76,98,65,34,65,99};8 MergeS(num,0,num.length-1);9 System.out.println(Arrays.toString(num));10 }11 public static void Merge(int num[],int low,int middle,inthigh){12 int i =low;13 int j = middle+1;14 int k = 0;15 int B[] = new int[high-low+1];16 while(i<=middle&&j<=high){17 if(num[i]<=num[j]){18 B[k] =num[i];19 k++;20 i++;21 }22 else{23 B[k] =num[j];24 k++;25 j++;26 }27 }28 while(i<=middle){29 B[k++] = num[i++];30 }31 while(j<=high){32 B[k++] = num[j++];33 }34 //System.arraycopy(B, 0, num, 0, num.length);
35 for(int l=0;l
六。希爾排序:
先取一個(gè)小于n的整數(shù)d1作為第一個(gè)增量,把文件的全部記錄分組。所有距離為d1的倍數(shù)的記錄放在同一個(gè)組中。先在各組內(nèi)進(jìn)行直接插入排序;然后,取第二個(gè)增量d2
?=1(
?
?…
七。堆排序:
堆排序(Heapsort)是指利用堆積樹(堆)這種數(shù)據(jù)結(jié)構(gòu)所設(shè)計(jì)的一種排序算法,它是選擇排序的一種??梢岳脭?shù)組的特點(diǎn)快速定位指定索引的元素。堆分為大根堆和小根堆,是完全二叉樹。大根堆的要求是每個(gè)節(jié)點(diǎn)的值都不大于其父節(jié)點(diǎn)的值,即A[PARENT[i]] >= A[i]。在數(shù)組的非降序排序中,需要使用的就是大根堆,因?yàn)楦鶕?jù)大根堆的要求可知,最大的值一定在堆頂。
八?;鶖?shù)排序:
第一步(來自百度百科)
以LSD為例,假設(shè)原來有一串?dāng)?shù)值如下所示:
73, 22, 93, 43, 55, 14, 28, 65, 39, 81
首先根據(jù)個(gè)位數(shù)的數(shù)值,在走訪數(shù)值時(shí)將它們分配至編號(hào)0到9的桶子中:
0
1 81
2 22
3 73 93 43
4 14
5 55 65
6
7
8 28
9 39
第二步
接下來將這些桶子中的數(shù)值重新串接起來,成為以下的數(shù)列:
81, 22, 73, 93, 43, 14, 55, 65, 28, 39
接著再進(jìn)行一次分配,這次是根據(jù)十位數(shù)來分配:
0
1 14
2 22 28
3 39
4 43
5 55
6 65
7 73
8 81
9 93
第三步
接下來將這些桶子中的數(shù)值重新串接起來,成為以下的數(shù)列:
14, 22, 28, 39, 43, 55, 65, 73, 81, 93
這時(shí)候整個(gè)數(shù)列已經(jīng)排序完畢;如果排序的對(duì)象有三位數(shù)以上,則持續(xù)進(jìn)行以上的動(dòng)作直至最高位數(shù)為止。
LSD的基數(shù)排序適用于位數(shù)小的數(shù)列,如果位數(shù)多的話,使用MSD的效率會(huì)比較好。MSD的方式與LSD相反,是由高位數(shù)為基底開始進(jìn)行分配,但在分配之后并不馬上合并回一個(gè)數(shù)組中,而是在每個(gè)“桶子”中建立“子桶”,將每個(gè)桶子中的數(shù)值按照下一數(shù)位的值分配到“子桶”中。在進(jìn)行完最低位數(shù)的分配后再合并回單一的數(shù)組中。
九。各排序算法比較:
圖片來自網(wǎng)絡(luò):
總結(jié)
以上是生活随笔為你收集整理的java 比较算法_JAVA排序算法实现和比较:冒泡,桶,选择,快排,归并的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 宠物美容工具(宠物狗猫的美容工具介绍)
- 下一篇: java启动时执行_java怎么实现项目