日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

JAVA最常用的排序_冒泡排序、选择排序、快速排序

發(fā)布時(shí)間:2025/3/15 编程问答 20 豆豆
生活随笔 收集整理的這篇文章主要介紹了 JAVA最常用的排序_冒泡排序、选择排序、快速排序 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

排序算法是Java面試題中最常考的,筆試題、機(jī)試題都會(huì)有,所有掌握最常用的排序是必須。

在效率中快速排序是這幾種效率最高的。

代碼驗(yàn)證過(guò),可以直接復(fù)制測(cè)試運(yùn)行。

代碼如下:

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("冒泡排序時(shí)間(毫秒):"+(end-begion));System.out.println(Arrays.toString(a));begion = System.currentTimeMillis();ArraySort.chooseSort(a2);end = System.currentTimeMillis();System.out.println("選擇排序時(shí)間(毫秒):"+(end-begion));System.out.println(Arrays.toString(a2));begion = System.currentTimeMillis();ArraySort.fastSort(a3, 0, a3.length-1);end = System.currentTimeMillis();System.out.println("快速排序時(shí)間(毫秒):"+(end-begion));System.out.println(Arrays.toString(a3));} } class ArraySort{/*** 冒泡排序算法:* 倆倆比較,如果a[x]>a[x+1] 就交換值,這是升序排序,將大值一直冒泡到最后面。* 第一輪將最大值冒泡到最后一位,然后此數(shù)不在參與比較。* 第二輪將剩余的最大值冒泡到倒數(shù)第二位,然后此數(shù)不在參與比較。* 。。。* 反之這是降序冒泡,把最小值的冒泡到最后。* @param a*/public static void bubbleUp(int[] a){for(int i=0;i<a.length-1;i++){//這里可以少循環(huán)一次,最后一輪剩1個(gè)數(shù)內(nèi)循環(huán)不在循環(huán)了,外循環(huán)是控制循環(huán)次數(shù)的。for(int j=0;j<a.length-i-1;j++){//內(nèi)循環(huán),進(jìn)行冒泡if(a[j]>a[j+1]){int temp = a[j];a[j] = a[j+1];a[j+1] = temp;}}}}/*** 選擇排序算法:* 第一個(gè)數(shù)和后面所有數(shù)進(jìn)行比較,取最小值(升序)/取最大值(降序)。* 同樣,然后第二個(gè)數(shù)和后面所有數(shù)進(jìn)行比較,取最值。* * @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;}}}}/*** 快速排序算法:* 快速排序簡(jiǎn)單的說(shuō)就是選擇一個(gè)基準(zhǔn),將比起大的數(shù)放在一邊,小的數(shù)放到另一邊。* 對(duì)這個(gè)數(shù)的兩邊再遞歸上述方法。* 此處采用最簡(jiǎn)單的快速排序,選擇數(shù)組最左邊的數(shù)為基準(zhǔn)數(shù)。* @param a*/public static void fastSort(int[] a,int left,int right){if(left>=right){//此時(shí)整理已經(jīng)完成了return ;}int l = left;int r = right;int baseNum = a[left];/*** 將所有比基準(zhǔn)大的數(shù)放在一邊,比基準(zhǔn)小的數(shù)放到另一邊,<span style="color:#ff0000;">與基準(zhǔn)數(shù)相等放在2邊都可以,但是不能不放或者2邊都放</span>。* 當(dāng)不滿足條件時(shí),該基準(zhǔn)數(shù)已經(jīng)找到自己的位置,也就是左邊全是小于等于自己的數(shù),右邊全是大于自己的數(shù)。* 此時(shí)是 按升序排序*/while(l<r){<span style="color:#ff0000;">//將小于基準(zhǔn)數(shù)的放在左邊</span>while(l<r&& a[r] >= baseNum){//從后往前找,直到找到小于基準(zhǔn)數(shù)的下標(biāo)。r--;}a[l] = a[r];<span style="color:#ff0000;">//將大于或等于基準(zhǔn)的數(shù)字放到右邊</span>while(l<r&&a[l] < baseNum ){//從前往后找,直到找到大于或等于基準(zhǔn)數(shù)的下標(biāo)。l++;}a[r] = a[l];}a[l] = baseNum;//一輪結(jié)束,將基準(zhǔn)數(shù)放到正確的位置fastSort(a, left, l-1);//基準(zhǔn)數(shù)左邊繼續(xù)fastSort(a, l+1, right);//基準(zhǔn)數(shù)右邊繼續(xù)}/*** * @param length 隨機(jī)數(shù)組長(zhǎng)度* @param bits 數(shù)組中數(shù)字的位數(shù)* @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;} }

快速排序中,紅色字體要注意,一定要考慮和基準(zhǔn)數(shù)相等情況,如果2邊都不放和基準(zhǔn)數(shù)相等的數(shù)或者2邊都放,那么如果數(shù)組中有重復(fù)的數(shù)字將一直死循環(huán)。

結(jié)果截圖:

總結(jié)

以上是生活随笔為你收集整理的JAVA最常用的排序_冒泡排序、选择排序、快速排序的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。