JAVA最常用的排序_冒泡排序、选择排序、快速排序
生活随笔
收集整理的這篇文章主要介紹了
JAVA最常用的排序_冒泡排序、选择排序、快速排序
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
排序算法是Java面試題中最常考的,筆試題、機試題都會有,所有掌握最常用的排序是必須。
在效率中快速排序是這幾種效率最高的。
代碼驗證過,可以直接復制測試運行。
代碼如下:
package com.lcx.interview;import java.util.Arrays;/*** * @author */ public class Interview_9_Sort {public static void main(String[] args) {long begion;long end;int[] a = ArraySort.randomArray(5000, 4);int[] a2 = ArraySort.randomArray(5000, 4);int[] a3 = ArraySort.randomArray(5000, 4);begion = System.currentTimeMillis();ArraySort.bubbleUp(a);end = System.currentTimeMillis();System.out.println("冒泡排序時間(毫秒):"+(end-begion));System.out.println(Arrays.toString(a));begion = System.currentTimeMillis();ArraySort.chooseSort(a2);end = System.currentTimeMillis();System.out.println("選擇排序時間(毫秒):"+(end-begion));System.out.println(Arrays.toString(a2));begion = System.currentTimeMillis();ArraySort.fastSort(a3, 0, a3.length-1);end = System.currentTimeMillis();System.out.println("快速排序時間(毫秒):"+(end-begion));System.out.println(Arrays.toString(a3));} } class ArraySort{/*** 冒泡排序算法:* 倆倆比較,如果a[x]>a[x+1] 就交換值,這是升序排序,將大值一直冒泡到最后面。* 第一輪將最大值冒泡到最后一位,然后此數不在參與比較。* 第二輪將剩余的最大值冒泡到倒數第二位,然后此數不在參與比較。* 。。。* 反之這是降序冒泡,把最小值的冒泡到最后。* @param a*/public static void bubbleUp(int[] a){for(int i=0;i<a.length-1;i++){//這里可以少循環一次,最后一輪剩1個數內循環不在循環了,外循環是控制循環次數的。for(int j=0;j<a.length-i-1;j++){//內循環,進行冒泡if(a[j]>a[j+1]){int temp = a[j];a[j] = a[j+1];a[j+1] = temp;}}}}/*** 選擇排序算法:* 第一個數和后面所有數進行比較,取最小值(升序)/取最大值(降序)。* 同樣,然后第二個數和后面所有數進行比較,取最值。* * @param a*/public static void chooseSort(int[] a){for (int i = 0; i < a.length; i++) {for (int j = i+1; j < a.length; j++) {if(a[i]>a[j]){int temp = a[j];a[j] = a[i];a[i] = temp;}}}}/*** 快速排序算法:* 快速排序簡單的說就是選擇一個基準,將比起大的數放在一邊,小的數放到另一邊。* 對這個數的兩邊再遞歸上述方法。* 此處采用最簡單的快速排序,選擇數組最左邊的數為基準數。* @param a*/public static void fastSort(int[] a,int left,int right){if(left>=right){//此時整理已經完成了return ;}int l = left;int r = right;int baseNum = a[left];/*** 將所有比基準大的數放在一邊,比基準小的數放到另一邊,<span style="color:#ff0000;">與基準數相等放在2邊都可以,但是不能不放或者2邊都放</span>。* 當不滿足條件時,該基準數已經找到自己的位置,也就是左邊全是小于等于自己的數,右邊全是大于自己的數。* 此時是 按升序排序*/while(l<r){<span style="color:#ff0000;">//將小于基準數的放在左邊</span>while(l<r&& a[r] >= baseNum){//從后往前找,直到找到小于基準數的下標。r--;}a[l] = a[r];<span style="color:#ff0000;">//將大于或等于基準的數字放到右邊</span>while(l<r&&a[l] < baseNum ){//從前往后找,直到找到大于或等于基準數的下標。l++;}a[r] = a[l];}a[l] = baseNum;//一輪結束,將基準數放到正確的位置fastSort(a, left, l-1);//基準數左邊繼續fastSort(a, l+1, right);//基準數右邊繼續}/*** * @param length 隨機數組長度* @param bits 數組中數字的位數* @return*/public static int[] randomArray(int length,int bits){int[] arr = new int[length];for(int i=0;i<length;i++){arr[i] = (int) (Math.random()*Math.pow(10, bits));}return arr;} }快速排序中,紅色字體要注意,一定要考慮和基準數相等情況,如果2邊都不放和基準數相等的數或者2邊都放,那么如果數組中有重復的數字將一直死循環。
結果截圖:總結
以上是生活随笔為你收集整理的JAVA最常用的排序_冒泡排序、选择排序、快速排序的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: annotation的理解
- 下一篇: 字符串:你看的懂的KMP算法(带验证)