java冒泡排序_JAVA实现经典排序算法(冒泡排序、选择排序、插入排序、希尔排序、堆排序、归并排序、快速排序)...
冒泡排序
依次比較相鄰的元素,若發(fā)現(xiàn)逆順序,則交換。小的向前換,大的向后換,本次循環(huán)完畢之后再次從頭開始掃描,直到某次掃描中沒有元素交換,說明每個元素都不比它后面的元素大,至此排序完成。
import java.util.Arrays;public class BubbleSort {public static void main(String[] args) {int[] arr=new int[] {5,7,2,9,4,1,0,5,7};System.out.println(Arrays.toString(arr));bubbleSort(arr);System.out.println(Arrays.toString(arr));}public static void bubbleSort(int[] arr) {for(int i=0;i<arr.length-1;i++) {for(int j=0;j<arr.length-1-i;j++) {if(arr[j]>arr[j+1]) {int temp=arr[j];arr[j]=arr[j+1];arr[j+1]=temp;}}}}}結(jié)果展示
選擇排序
每一次從待排序的數(shù)據(jù)元素中選出最小(或最大)的一個元素,存放在序列的起始位置,直到全部待排序的數(shù)據(jù)元素排完。
import java.util.Arrays;public class SelectSort {public static void main(String[] args) {int[] arr = new int[] {3,4,5,7,1,2,0,3,6,8};selectSort(arr);System.out.println(Arrays.toString(arr));}public static void selectSort(int[] arr) {for(int i=0;i<arr.length;i++) {int minIndex=i;for(int j=i+1;j<arr.length;j++) {if(arr[minIndex]>arr[j]) {minIndex=j;}}if(i!=minIndex) {int temp=arr[i];arr[i]=arr[minIndex];arr[minIndex]=temp;}}}}結(jié)果展示
插入排序
- 從第一個元素開始,該元素可以認(rèn)為已經(jīng)被排序
- 取出下一個元素,在已經(jīng)排序的元素序列中從后向前掃描
- 如果該元素(已排序)大于新元素,將該元素移到下一位置
- 重復(fù)步驟3,直到找到已排序的元素小于或者等于新元素的位置
- 將新元素插入到該位置后
- 重復(fù)上面步驟
結(jié)果展示
希爾排序
希爾排序(Shell’s Sort)是插入排序的一種又稱“縮小增量排序”。希爾排序是把記錄按下標(biāo)的一定增量分組,對每組使用直接插入排序算法排序;隨著增量逐漸減少,每組包含的關(guān)鍵詞越來越多,當(dāng)增量減至1時,整個文件恰被分成一組,算法便終止。
import java.util.Arrays;public class ShellSort {public static void main(String[] args) {int[] arr = new int[] { 3, 5, 2, 7, 8, 1, 2, 0, 4, 7, 4, 3, 8 };System.out.println(Arrays.toString(arr));shellSort(arr);System.out.println(Arrays.toString(arr));}public static void shellSort(int[] arr) {int k = 1;for (int d = arr.length / 2; d > 0; d /= 2) {for (int i = d; i < arr.length; i++) {for (int j = i - d; j >= 0; j -= d) {if (arr[j] > arr[j + d]) {int temp = arr[j];arr[j] = arr[j + d];arr[j + d] = temp;}}}System.out.println( Arrays.toString(arr));k++;}}}結(jié)果展示
堆排序
在堆的數(shù)據(jù)結(jié)構(gòu)中,堆中的最大值總是位于根節(jié)點(在優(yōu)先隊列中使用堆的話堆中的最小值位于根節(jié)點)。
堆中定義以下幾種操作:
- 最大堆調(diào)整:將堆的末端子節(jié)點作調(diào)整,使得子節(jié)點永遠(yuǎn)小于父節(jié) 點創(chuàng)建最大堆:將堆所有數(shù)據(jù)重新排序。
- 堆排序:移除位在第一個數(shù)據(jù)的根節(jié)點,并做最大堆調(diào)整的遞歸運算。
結(jié)果展示
歸并排序
歸并操作的工作原理如下:
- 第一步:申請空間,使其大小為兩個已經(jīng) 排序序列之和,該空間用來存放合并后的序列
- 第二步:設(shè)定兩個 指針,最初位置分別為兩個已經(jīng)排序序列的起始位置
- 第三步:比較兩個指針?biāo)赶虻脑?#xff0c;選擇相對小的元素放入到合并空間,并移動指針到下一位置重復(fù)步驟3直到某一指針超出序列尾,將另一序列剩下的所有元素直接復(fù)制到合并序列尾
結(jié)果展示
快速排序
快速排序算法利用的是一趟快速排序,基本內(nèi)容是選擇一個數(shù)作為準(zhǔn)基數(shù),然后利用這個準(zhǔn)基數(shù)將遺傳數(shù)據(jù)分為兩個部分,第一部分比這個準(zhǔn)基數(shù)小,都放在準(zhǔn)基數(shù)的左邊,第二部分都比這個準(zhǔn)基數(shù)大,放在準(zhǔn)基數(shù)的右邊。
import java.util.Arrays;public class QuickSort {public static void main(String[] args) {int[] arr = new int[] {3,4,6,7,2,7,2,8,0,9,1};quickSort(arr,0,arr.length-1);System.out.println(Arrays.toString(arr));}public static void quickSort(int[] arr,int start,int end) {if(start<end) {int stard=arr[start];int low=start;int high=end;while(low<high) {while(low<high&&stard<=arr[high]) {high--;}arr[low]=arr[high];while(low<high&&arr[low]<=stard) {low++;}arr[high]=arr[low];}arr[low]=stard;quickSort(arr, start, low);quickSort(arr, low+1, end);}}}結(jié)果展示
總結(jié)
以上是生活随笔為你收集整理的java冒泡排序_JAVA实现经典排序算法(冒泡排序、选择排序、插入排序、希尔排序、堆排序、归并排序、快速排序)...的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: win7定时关机命令_电脑两个小技巧:新
- 下一篇: R 回归 虚拟变量na_如何优雅地计算多