日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区

您的位置:首頁技術文章
文章詳情頁

深入理解java中Arrays.sort()的用法

瀏覽:29日期:2022-09-01 16:42:15

Java的Arrays類中有一個sort()方法,該方法是Arrays類的靜態(tài)方法,在需要對數組進行排序時,非常的好用。

但是sort()的參數有好幾種,基本上是大同小異,下面是以int型數組為例的Arrays.sort()的典型用法

import java.util.Arrays;import java.util.Comparator;/** * Arrays.sort()排序 */public class SortTest{ public static void main(String []args) { int[] ints=new int[]{2,324,4,57,1}; System.out.println('增序排序后順序'); Arrays.sort(ints); for (int i=0;i<ints.length;i++) { System.out.print(ints[i]+' '); } System.out.println('n減序排序后順序'); //要實現減序排序,得通過包裝類型數組,基本類型數組是不行滴 Integer[] integers=new Integer[]{2,324,4,4,6,1}; Arrays.sort(integers, new Comparator<Integer>() { /* * 此處與c++的比較函數構成不一致 * c++返回bool型,而Java返回的為int型 * 當返回值>0時 * 進行交換,即排序(源碼實現為兩樞軸快速排序) */ public int compare(Integer o1, Integer o2) {return o2-o1; } public boolean equals(Object obj) {return false; } }); for (Integer integer:integers) { System.out.print(integer+' '); } System.out.println('n對部分排序后順序'); int[] ints2=new int[]{212,43,2,324,4,4,57,1}; //對數組的[2,6)位進行排序 Arrays.sort(ints2,2,6); for (int i=0;i<ints2.length;i++) { System.out.print(ints2[i]+' '); } }}

排序結果如下

增序排序后順序1 2 4 57 324減序排序后順序324 6 4 4 2 1對部分排序后順序212 43 2 4 4 324 57 1

打開Arrays.sort()源碼,還是以int型為例,其他類型也是大同小異

public static void sort(int[] a) { DualPivotQuicksort.sort(a, 0, a.length - 1, null, 0, 0); } public static void sort(int[] a, int fromIndex, int toIndex) { rangeCheck(a.length, fromIndex, toIndex); DualPivotQuicksort.sort(a, fromIndex, toIndex - 1, null, 0, 0); }

從源碼中發(fā)現,兩種參數類型的sort方法都調用了 DualPivotQuicksort.sort()方法繼續(xù)跟蹤源碼

static void sort(int[] a, int left, int right, int[] work, int workBase, int workLen) { // Use Quicksort on small arrays if (right - left < QUICKSORT_THRESHOLD) { sort(a, left, right, true); return; } /* * Index run[i] is the start of i-th run * (ascending or descending sequence). */ int[] run = new int[MAX_RUN_COUNT + 1]; int count = 0; run[0] = left; // Check if the array is nearly sorted for (int k = left; k < right; run[count] = k) { if (a[k] < a[k + 1]) { // ascendingwhile (++k <= right && a[k - 1] <= a[k]); } else if (a[k] > a[k + 1]) { // descendingwhile (++k <= right && a[k - 1] >= a[k]);for (int lo = run[count] - 1, hi = k; ++lo < --hi; ) { int t = a[lo]; a[lo] = a[hi]; a[hi] = t;} } else { // equalfor (int m = MAX_RUN_LENGTH; ++k <= right && a[k - 1] == a[k]; ) { if (--m == 0) { sort(a, left, right, true); return; }} } /* * The array is not highly structured, * use Quicksort instead of merge sort. */ if (++count == MAX_RUN_COUNT) {sort(a, left, right, true);return; } } // Check special cases // Implementation note: variable 'right' is increased by 1. if (run[count] == right++) { // The last run contains one element run[++count] = right; } else if (count == 1) { // The array is already sorted return; } // Determine alternation base for merge byte odd = 0; for (int n = 1; (n <<= 1) < count; odd ^= 1); // Use or create temporary array b for merging int[] b; // temp array; alternates with a int ao, bo; // array offsets from ’left’ int blen = right - left; // space needed for b if (work == null || workLen < blen || workBase + blen > work.length) { work = new int[blen]; workBase = 0; } if (odd == 0) { System.arraycopy(a, left, work, workBase, blen); b = a; bo = 0; a = work; ao = workBase - left; } else { b = work; ao = 0; bo = workBase - left; } // Merging for (int last; count > 1; count = last) { for (int k = (last = 0) + 2; k <= count; k += 2) {int hi = run[k], mi = run[k - 1];for (int i = run[k - 2], p = i, q = mi; i < hi; ++i) { if (q >= hi || p < mi && a[p + ao] <= a[q + ao]) { b[i + bo] = a[p++ + ao]; } else { b[i + bo] = a[q++ + ao]; }}run[++last] = hi; } if ((count & 1) != 0) {for (int i = right, lo = run[count - 1]; --i >= lo; b[i + bo] = a[i + ao]);run[++last] = right; } int[] t = a; a = b; b = t; int o = ao; ao = bo; bo = o; } }

結合文檔以及源代碼,我們發(fā)現,jdk中的Arrays.sort()的實現是通過所謂的雙軸快排的算法

/** * This class implements the Dual-Pivot Quicksort algorithm by * Vladimir Yaroslavskiy, Jon Bentley, and Josh Bloch. The algorithm * offers O(n log(n)) performance on many data sets that cause other * quicksorts to degrade to quadratic performance, and is typically * faster than traditional (one-pivot) Quicksort implementations. * * All exposed methods are package-private, designed to be invoked * from public methods (in class Arrays) after performing any * necessary array bounds checks and expanding parameters into the * required forms. * * @author Vladimir Yaroslavskiy * @author Jon Bentley * @author Josh Bloch * * @version 2011.02.11 m765.827.12i:57pm * @since 1.7 */

Java1.8的快排是一種雙軸快排,顧名思義:雙軸快排是基于兩個軸來進行比較,跟普通的選擇一個點來作為軸點的快排是有很大的區(qū)別的,雙軸排序利用了區(qū)間相鄰的特性,對原本的快排進行了效率上的提高,很大程度上是利用了數學的一些特性。。。。。嗯。。。反正很高深的樣子

算法步驟

1.對于很小的數組(長度小于27),會使用插入排序。2.選擇兩個點P1,P2作為軸心,比如我們可以使用第一個元素和最后一個元素。3.P1必須比P2要小,否則將這兩個元素交換,現在將整個數組分為四部分:(1)第一部分:比P1小的元素。(2)第二部分:比P1大但是比P2小的元素。(3)第三部分:比P2大的元素。(4)第四部分:尚未比較的部分。在開始比較前,除了軸點,其余元素幾乎都在第四部分,直到比較完之后第四部分沒有元素。4.從第四部分選出一個元素a[K],與兩個軸心比較,然后放到第一二三部分中的一個。5.移動L,K,G指向。6.重復 4 5 步,直到第四部分沒有元素。7.將P1與第一部分的最后一個元素交換。將P2與第三部分的第一個元素交換。8.遞歸的將第一二三部分排序。

疑問:為啥不用泛型

到此這篇關于深入理解java中Arrays.sort()的用法的文章就介紹到這了,更多相關java Arrays.sort()內容請搜索好吧啦網以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持好吧啦網!

標簽: Java
相關文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
亚洲成av人片一区二区密柚| 热久久免费视频| 免费日韩一区二区| 99精品在线| 欧美日韩一区二区国产| 日本伊人久久| 婷婷视频一区二区三区| 婷婷精品在线| 日韩1区2区3区| 国产精品v日韩精品v欧美精品网站 | 在线综合亚洲| 欧美精品一线| 视频在线不卡免费观看| 日韩精品欧美大片| 国产视频网站一区二区三区| 首页国产欧美久久| 亚洲作爱视频| 欧美综合国产| 亚洲人成精品久久久| 日韩欧美在线精品| 久久伊人久久| 成人羞羞视频在线看网址| 九九综合九九| 日本大胆欧美人术艺术动态| 另类激情亚洲| 国产精品亚洲欧美一级在线| 亚洲丝袜啪啪| 亚洲性色视频| 国产欧美一区二区三区国产幕精品 | 亚洲爱爱视频| 另类激情亚洲| re久久精品视频| 精品日韩视频| 欧美国产另类| 999国产精品永久免费视频app| 日韩av午夜在线观看| 黄色亚洲免费| 欧美国产美女| 国产一区二区三区日韩精品| 国产私拍福利精品视频二区| 国产精品777777在线播放| 亚洲午夜黄色| 久久精品二区三区| 欧美天堂视频| 麻豆精品少妇| 亚洲黑丝一区二区| 丝袜美腿一区二区三区| 国产精品nxnn| 亚洲欧美伊人| 亚洲欧美久久久| 你懂的亚洲视频| 欧美天堂一区| 亚洲婷婷丁香| 国产精品v日韩精品v欧美精品网站| 蜜臀a∨国产成人精品| 国产高清一区| 极品裸体白嫩激情啪啪国产精品| 桃色av一区二区| 日韩成人精品一区| 精品一区视频| 精品亚洲a∨| 欧美精品一二| 蜜芽一区二区三区| 日韩精品亚洲一区二区三区免费| 欧美日韩日本国产亚洲在线 | 欧美片网站免费| 五月国产精品| 欧美成a人免费观看久久| 国产精品亚洲欧美一级在线| 亚洲免费成人| 国产精品毛片一区二区三区| 国产精品mm| 91精品国产乱码久久久久久久| 日韩在线a电影| 亚洲综合电影| 一区二区国产在线观看| 国产aa精品| 97久久超碰| 美女国产一区| 欧美亚洲精品在线| 日本成人中文字幕在线视频| 捆绑调教美女网站视频一区| 999国产精品视频| 午夜在线视频观看日韩17c| 欧美一级久久| 中文字幕在线视频久| 久久国产精品久久久久久电车| 日韩精彩视频在线观看| 日韩国产专区| 国产精品视频一区视频二区| 国产夫妻在线| 国产精品1区| 日韩精品91亚洲二区在线观看| 久久精品国产成人一区二区三区| 蜜臀久久99精品久久久久宅男| 欧美日韩a区| 免费成人在线视频观看| 久久中文字幕二区| 精品三级国产| 亚洲精品福利| 欧美午夜网站| 福利欧美精品在线| 麻豆精品久久| 国产欧美综合一区二区三区| 丝袜a∨在线一区二区三区不卡| 久久精品国产精品亚洲毛片| 日韩精品五月天| 亚洲视频国产| 综合日韩在线| 日韩在线黄色| 日韩 欧美一区二区三区| 久久久久观看| 91嫩草精品| 91国内精品| 国产精品2023| 日韩黄色大片网站| 欧美精品资源| 国产成人精品三级高清久久91 | 国产精品久久久久久久免费观看 | 欧美日韩一区二区三区视频播放| 国产精品最新| 国产精品网在线观看| 国产精品麻豆成人av电影艾秋 | 三级欧美在线一区| 狠狠爱www人成狠狠爱综合网| 日韩影院在线观看| 久久99久久人婷婷精品综合| 亚洲高清毛片| 蜜臀国产一区二区三区在线播放| 成人精品高清在线视频| 久久久久伊人| bbw在线视频| 三上悠亚国产精品一区二区三区 | 日韩高清三区| 日本在线成人| 日本午夜精品一区二区三区电影| 国产日韩欧美三级| 国产欧洲在线| 99亚洲精品| 国产视频网站一区二区三区| 精品久久电影| 99久久精品网站| 亚洲2区在线| 亚洲精品福利电影| 亚洲欧洲美洲国产香蕉| 欧美黄色一区| 亚洲精品中文字幕99999| 国产乱码精品一区二区三区四区 | 在线观看精品| 乱人伦精品视频在线观看| 国产精品片aa在线观看| 欧美国产91| 久久亚洲黄色| 婷婷亚洲五月| 精品久久久久中文字幕小说| 日本午夜精品久久久久| 亚洲91视频| 国产欧美一区二区三区精品观看 | 在线观看一区| 欧美日韩一视频区二区| 国产91在线精品| 136国产福利精品导航网址| 亚洲欧美视频| 欧美日韩亚洲一区| 日韩在线观看| 亚洲欧洲日韩精品在线| 亚洲国产一区二区在线观看| 美女精品久久| 欧美a在线观看| 国产精品普通话对白| 九色porny丨国产首页在线| 美女国产精品久久久| 精品久久精品| 久久久久国产| 蜜臀av免费一区二区三区| se01亚洲视频| 免费不卡中文字幕在线| 午夜一级在线看亚洲| 青青国产精品| 精品久久久久久久| 欧美+亚洲+精品+三区| 亚洲一区黄色| 国产黄色精品| 久久精品青草| 亚洲不卡av不卡一区二区| 999久久久免费精品国产| 亚洲一区区二区| 国产日韩欧美三区| 欧美日韩一区二区国产| 婷婷激情久久| 丝袜美腿一区二区三区| 欧美亚洲tv| 日韩成人精品一区二区| 欧美va亚洲va日韩∨a综合色| 久久亚洲影院| 国产精品蜜月aⅴ在线| 亚洲天堂一区二区| 亚欧洲精品视频在线观看| 久久久91麻豆精品国产一区| 欧美午夜精彩|