精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

因為排序不明白,被面試官錘了一頓

開發 后端
排序算法的種類可以說是比較的多樣化了,對時間,對空間的效率,不同的排序算法的優缺點是不一樣的,有些是用時間換空間的,有些是拿空間換時間的,今天阿粉就來一一列舉一下。

[[440899]]

今天阿粉就來談一下這個 Java 中的各種排序的算法,因為之前遇到了一個面試高級開發,結果竟然出了一個 九九乘法表的題,阿粉當時聽完讀者說的,瞬間就明白是什么意思了,這感覺有點忽悠人,但是實際上卻是面試官想要考察你的排序算法的事了,也有可能是真的無聊。

排序算法

什么是排序算法,實際上這個沒有太多的說法,意思表達清楚就可以了,所謂排序,就是使一串記錄,按照其中的某個或某些關鍵字的大小,遞增或遞減地排列起來的操作。

排序算法的種類可以說是比較的多樣化了,對時間,對空間的效率,不同的排序算法的優缺點是不一樣的,有些是用時間換空間的,有些是拿空間換時間的,今天阿粉就來一一列舉一下。

冒泡排序

什么是冒泡排序呢?

冒泡排序就是依次比較相鄰的兩個數,將小數放在前面,大數放在后面。

就像一個泡泡,一個泡泡一樣,直接往起漂。

冒泡排序就是依次比較相鄰的兩個數,將小數放在前面,大數放在后面。

實際上比較的過程就是這個樣子的:

第一次比較:

首先比較第1個和第2個數,將小數放前面,大數放后面,然后比較第2個數和第3個數,小數放前面,大數放后面,然后一直比較到最后,這樣,最大的一個數就放到了最后面了。

第二次比較:

首先比較第1個和第2個數,將小數放前面,大數放后面,然后比較到倒數第二個數,然后第二次比較結束,這樣在最后一個位置的就是最大的,然后倒數第二個位置的是第二大的數。

然后一直這樣往下執行,第三次就是來取第三個數,這樣依次循環,這樣說大家肯定都是能理解的,假設需要排序的序列的個數是n,則需要經過n-1輪,最終完成排序。在第一輪中,比較的次數是n-1次,之后每輪減少1次。

我們接下來使用代碼來實現一下:

  1. public static void main(int[] a) { 
  2.         int temp
  3.         //需要比較n-1輪 
  4.         for (int i = 0; i < a.length-1; i++) { 
  5.             //根據a.length-i-1,每輪需要比較的次數逐輪減少1次 
  6.             for (int j = 0; j < a.length-i-1 ; j++) { 
  7.                 //相鄰數進行比較,符合條件進行替換 
  8.                 if (a[j] > a[j+1]) { 
  9.                     temp = a[j]; 
  10.                     a[j] = a[j+1]; 
  11.                     a[j+1] = temp
  12.                 } 
  13.             } 
  14.         } 
  15.     } 
  16.      

插入排序

插入排序種類比較多

  • 直接插入排序
  • 二分插入排序
  • 希爾排序

這些排序方式全都是屬于插入排序的,

我們先來看看直接插入排序:

比較的過程是這個樣子的,數組的第二個數據開始往前比較,即一開始用第二個數和他前面的一個比較,如果 符合條件則讓他們交換位置。

假如我們給定一個數組,我們要按照從小到大排序,數組為 [3,1,4,6,5,17,12,11] 這時候,第一步就是拿著 1 和 3 進行比較,如果 1 小于 3 ,這個時候,就把 1 和 3 換個位置,[1,3,4,6,5,17,12,11] .

接下來再用第三個數和第二個比較,符合則交換,但是此處還得繼續往前比較 ,就是用 4 和 3 和 1 分別去比較,然后一直這么重復下去。直到把所有的數據都排列完之后,就得到了我們想要的結果,我們來寫個代碼看看是什么樣子的。

  1. public static void basal(int[] array) { 
  2.  // 從第二項開始 
  3.     if (array == null || array.length < 2) { 
  4.             return
  5.         } 
  6.         for (int i = 1; i < array.length; i++) { 
  7.             int cur = array[i]; 
  8.             // cur 落地標識,防止待插入的數最小 
  9.             boolean flag = false
  10.             // 倒序遍歷,不斷移位 
  11.             for (int j = i - 1; j > -1; j--) { 
  12.                 if (cur < array[j]) { 
  13.                     array[j + 1] = array[j]; 
  14.                 }else { 
  15.                     array[j + 1] = cur; 
  16.                     flag = true
  17.                     break; 
  18.                 } 
  19.             } 
  20.             if (!flag) { 
  21.              array[0] = cur; 
  22.             } 
  23.         } 
  24.     } 

既然我們之前都說了,插入排序的方法有很多種,那么我們也得說說其他的插入排序,然后在看看他們都有什么不同的地方,大家說對不對呢?

既然我們剛才都說了排序每次都要講數組后移,但是我們之前的判斷條件上卻是可以優化出來的,這樣優化優化的就衍生出來了其他的不同的插入排序,接下來我們就來看看這個二分查找插入排序。

二分查找法插入排序

優化直接插入排序的核心在于:快速定位當前數字待插入的位置。在一個有序數組中查找一個給定的值,最快的方法無疑是二分查找法,至少在阿粉的心中如果想到優化的時候肯定是第一時間選擇的就是可不可以使用二分查找法呢?

我們先來看看代碼實現,然后再看看他有什么缺點,為啥有很多人都不選擇使用二分查找插入排序。

  1. // 利用系統自帶的二分查找法,定位插入位置 
  2.    // 不穩定排序 
  3.   public static void optimized(int[] array) { 
  4.       if (array == null || array.length < 2) { 
  5.           return
  6.       } 
  7.      for (int i = 1; i < array.length; i++) {             int cur = array[i]; 
  8.          int[] sorted = Arrays.copyOf(array, i); 
  9.          int index = Arrays.binarySearch(sorted,cur);             if (index < 0) { 
  10.              index = -(index + 1); 
  11.         } 
  12.          for (int j = i - 1; j > index - 1; j--) { 
  13.              array[j + 1] = array[j]; 
  14.          } 
  15.          array[index] = cur; 
  16.       } 
  17.  } 

在這其中,阿粉使用了系統自帶的Arrays,然后進行了二分查找插入排序,為什么這么用呢?在JDK中提供了 Arrays.binarySearch(),方法的入參需要將有序數組傳遞進去 來進行實現,為什么不用這種方法呢?

假如在排序之前,有兩個數相等,但是在排序結束之后,它們兩個有可能改變順序這就是說明該排序算法具有不穩定性。這就是大家所說的穩定性。

既然都有這種不穩定的排序,那是不是就應該存在穩定的排序呢?對沒錯,就是有,那么什么是穩定的排序呢?對,大家沒有想錯,冒泡排序就是穩定排序,因為冒泡排序只在相鄰元素大小不符合要求時才調換他們的位置,它并不改變相同元素之間的相對順序, 因此它是穩定的排序算法。

既然我們剛才說了這個插排序中還有希爾排序,我們再來看看希爾排序。

希爾排序

說實話,阿粉第一次知道這個排序的時候,就想說,是不是一個叫做希爾的人改進的,結果,發現還真是,希爾排序,又叫做((縮小增量排序),因 D.L.Shell 于 1959 年提出而得名,實際上應該叫做Shell's Sort。

希爾排序是先將整個待排序的記錄序列分割成為若干子序列分別進行直接插入排序,待整個序列中的記錄“基本有序”時,再對全體記錄進行依次直接插入排序。

實際上就相當于先進行了一個簡單的分組,將待排序數組按照步長gap進行分組,然后將每組的元素利用直接插入排序的方法進行排序;每次再將gap折半減小,循環上述操作;當gap=1時,利用直接插入,完成排序。

代碼實現是這個樣子的。

  1. public static void sort(int[] a) { 
  2.     int length = a.length; 
  3.     int h = 1; 
  4.     while (h < length / 3) h = 3 * h + 1; 
  5.     for (; h >= 1; h /= 3) { 
  6.         for (int i = 0; i < a.length - h; i += h) { 
  7.             for (int j = i + h; j > 0; j -= h) { 
  8.                 if (a[j] < a[j - h]) { 
  9.                     int temp = a[j]; 
  10.                     a[j] = a[j - h]; 
  11.                     a[j - h] = temp
  12.                 } 
  13.             } 
  14.         } 
  15.     } 

選擇排序

選擇排序(Selection sort)是一種簡單直觀的排序算法。

這個就比較簡單了,為什么這么說,是因為他就是直接從未排序的序列中去找最小或者最大的元素,存放到排序序列的起始位置,然后,再從剩余未排序元素中繼續尋找最小(大)元素,然后放到已排序序列的末尾。以此類推,直到所有元素均排序完畢。

實際上和冒泡排序在想法上有一丟丟的相似,但是就是不一樣。

我們看看代碼實現:

  1. public static void sort(int[] a) { 
  2.     for (int i = 0; i < a.length; i++) { 
  3.         int min = i; 
  4.         //選出之后待排序中值最小的位置 
  5.         for (int j = i + 1; j < a.length; j++) { 
  6.             if (a[j] < a[min]) { 
  7.                 min = j; 
  8.             } 
  9.         } 
  10.         //最小值不等于當前值時進行交換 
  11.         if (min != i) { 
  12.             int temp = a[i]; 
  13.             a[i] = a[min]; 
  14.             a[min] = temp
  15.         } 
  16.     } 

既然阿粉都給大家列出了這幾種排序,那么我們又回到一個問題上來了,排序這么多,怎么選擇,為什么選擇,這就又涉及到了時間復雜度和空間復雜度上面了,要么用空間換時間,要么用時間換空間。

總結

冒泡排序

平均時間復雜度 最好情況 最壞情況 空間復雜度
O(n²) O(n) O(n²) O(1)

直接插入排序

平均時間復雜度 最好情況 最壞情況 空間復雜度
O(n²) O(n²) O(n²) O(1)

二分查找排序

平均時間復雜度 最好情況 最壞情況 空間復雜度
O(n²) O(n²) O(n²) O(1)

希爾排序

平均時間復雜度 最好情況 最壞情況 空間復雜度
O(nlog2 n) O(nlog2 n) O(nlog2 n) O(1)

選擇排序 

平均時間復雜度 最好情況 最壞情況 空間復雜度
O(n²) O(n²) O(n²) O(1)

今天的排序就說到這里了,你學會了么?

 

責任編輯:武曉燕 來源: Java極客技術
相關推薦

2020-06-22 07:47:46

提交面試官訂單

2020-09-24 06:39:58

MySQL數據庫

2020-08-03 07:04:54

測試面試官應用程序

2025-03-25 08:50:00

2023-12-25 09:03:33

MySQL索引數據庫

2025-09-15 00:00:01

2025-03-24 00:00:15

2021-07-05 22:09:53

面試官CollectionsJDK7

2020-10-16 15:27:04

面試算法

2020-05-12 11:05:54

MySQL索引數據庫

2015-12-23 11:32:50

2021-03-01 07:59:24

架構系統Zachman

2025-10-31 02:25:00

TomcatContainer代碼

2018-05-14 11:31:02

2018-05-14 17:36:59

2009-04-23 08:31:23

微軟鮑爾默收購

2018-09-04 11:10:31

Python編程語言面試

2021-03-17 08:39:24

作用域作用域鏈JavaScript

2021-03-16 22:25:06

作用域鏈作用域JavaScript

2020-05-22 08:11:48

線程池JVM面試
點贊
收藏

51CTO技術棧公眾號

色综合av在线| 成人在线视频一区二区| 色天天综合狠狠色| 91小视频在线播放| 免费毛片在线看片免费丝瓜视频 | 九九综合在线| 91精品国产福利| 777精品久无码人妻蜜桃| 岛国最新视频免费在线观看| 国产精品综合二区| 国产成人极品视频| 久久久精品国产sm调教网站| 免费看成人吃奶视频在线| 欧美一区二区视频网站| 亚洲熟妇av一区二区三区漫画| 在线观看二区| 97se狠狠狠综合亚洲狠狠| 国产精品日日做人人爱| 日本在线观看中文字幕| 欧美电影一区| 亚洲女人天堂av| 韩国三级在线看| 日韩免费小视频| 亚洲国产精品视频| 五月天色婷婷综合| 国产私人尤物无码不卡| 9久草视频在线视频精品| 91久久精品国产91久久性色| 日本视频网站在线观看| 欧美午夜一区| 久久深夜福利免费观看| 精品亚洲aⅴ无码一区二区三区| 草莓视频一区二区三区| 777奇米四色成人影色区| 五月天婷婷激情视频| 妞干网免费在线视频| 一区二区免费看| 最新黄色av网站| www 日韩| 国产精品沙发午睡系列990531| 久久综合狠狠综合久久综青草| 亚洲精品久久久久久久久久| 麻豆久久一区二区| 国产极品精品在线观看| 九九精品免费视频| 美女久久一区| 日韩av免费看网站| 国产精品777777| 亚洲一区欧美二区| 51ⅴ精品国产91久久久久久| 免费毛片一区二区三区| 亚洲午夜一级| 海角国产乱辈乱精品视频| 欧美成人一二三区| 欧美三级在线| 久久久久久久久久久国产| 国产亚洲精品av| 韩日精品视频| 久久久久久久久久久网站| 久久久久黄色片| 国产精品啊v在线| 97激碰免费视频| 国产精品自拍99| 久久在线精品| 国产精自产拍久久久久久蜜| 91国产免费视频| 国产精品中文有码| 国产在线一区二| 嫩草研究院在线观看| 国产欧美精品一区二区三区四区 | 国产亚洲精品自在久久| 国产毛片在线视频| 捆绑调教一区二区三区| 91免费国产网站| 亚洲精选一区二区三区| 91在线视频18| 亚洲视频小说| 性欧美1819sex性高清大胸| 亚洲国产一二三| 免费在线观看毛片网站| 欧美少妇激情| 精品91自产拍在线观看一区| 添女人荫蒂视频| 第一会所亚洲原创| 欧美二区乱c黑人| 亚洲图片在线视频| 韩国av一区二区| 国产一区二区无遮挡| 成人在线高清视频| 一区二区三区色| 日本一本二本在线观看| 日韩成人在线电影| 亚洲精品电影网站| 最新黄色av网址| 亚洲青涩在线| 国产欧美日韩中文字幕| 精品国自产在线观看| 久久精品黄色片| 天天干天天玩天天操| 久久亚洲中文字幕无码| 欧美一区二区高清在线观看| 国产一级做a爱免费视频| 久久国产欧美| 91丝袜脚交足在线播放| 亚洲欧美日韩一级| 人人超在线公开视频| 日韩欧美亚洲国产一区| 成人性生交视频免费观看| 西西大胆午夜视频| 毛片a片免费观看| 亚洲国产一成人久久精品| 69av在线视频| 99国产在线播放| 久久久高清一区二区三区| 狠狠躁夜夜躁人人躁婷婷91| 国产日产欧美一区| 国产传媒欧美日韩| av黄色在线观看| 精品国产999| 日韩欧美中文在线视频| 不卡在线一区二区| 欧美亚洲另类制服自拍| 精品美女www爽爽爽视频| 国产日韩欧美电影| 国产特级黄色大片| 蜜桃精品一区二区三区| 中文字幕欧美国内| 久久青青草原亚洲av无码麻豆 | 国产va免费精品观看精品视频| 欧美精品情趣视频| 91高潮大合集爽到抽搐| 日本一区二区动态图| 国产xxxxx在线观看| 精品国产导航| 欧美激情一区二区久久久| 国产又粗又猛又黄| 国产精品久久看| 免费一级特黄录像| 欧美日韩中字| 国产精品第8页| 久久精品蜜桃| 色八戒一区二区三区| 国产色视频一区二区三区qq号| 激情综合自拍| 国内精品**久久毛片app| xxxx另类黑人| 精品成人在线观看| 日韩成人av毛片| 91亚洲精品久久久蜜桃网站| 3d动漫一区二区三区| 欧美精品密入口播放| 久久免费视频在线观看| 少妇高潮一区二区三区99小说 | 欧美成人高潮一二区在线看| 国产一区福利| 欧美中文在线字幕| 免费理论片在线观看播放老| 一本大道久久a久久综合婷婷| 国产美女精品久久| 日本不卡不码高清免费观看| 亚洲精品乱码视频| www.欧美视频| 欧美黑人一区二区三区| 欧美一级视频免费| 欧美日韩亚洲一区二区| 国产精品成人无码免费| 蜜臀av一级做a爰片久久| 综合操久久久| 97se亚洲| 欧美在线www| 91网页在线观看| 日韩欧美一级片| 韩国av免费观看| 日本一区二区三区免费乱视频| 色噜噜狠狠一区二区| 综合亚洲视频| 国产综合精品一区二区三区| 黄色成人免费网| 精品国产区一区二区三区在线观看| jlzzjlzzjlzz亚洲人| 激情亚洲一区二区三区四区 | 中文字幕av不卡在线| 欧美在线黄色| 精品国产中文字幕| 激情欧美一区二区三区黑长吊| 麻豆国产精品va在线观看不卡| 成人免费视频国产| 在线亚洲人成电影网站色www| 欧美爱爱免费视频| 91美女福利视频| 亚洲免费黄色网| 99riav1国产精品视频| 亚洲aⅴ天堂av在线电影软件| 日韩激情精品| 国产精品9999| 国产三线在线| 最近2019年手机中文字幕| 亚洲国产精品18久久久久久| 日本韩国视频一区二区| 亚洲色图综合区| 国产亚洲一区二区三区四区| 91亚洲一线产区二线产区| 六月婷婷一区| 黄色片免费在线观看视频| 国产欧美日韩在线观看视频| 国产精品久久久对白| 久久福利在线| 日本欧美中文字幕| 亚洲大胆人体大胆做受1| 一道本无吗dⅴd在线播放一区 | 在线视频日韩精品| 日本美女一级片| 6080亚洲精品一区二区| 激情五月婷婷网| 亚洲超碰精品一区二区| 久久久精品少妇| 久久久国际精品| 国产激情第一页| 国产一区二区三区高清播放| 国产理论在线播放| 国产美女一区| 亚洲美免无码中文字幕在线| 亚洲国产精品久久久久蝴蝶传媒| 奇米视频888战线精品播放| 噜噜噜天天躁狠狠躁夜夜精品| 3d动漫啪啪精品一区二区免费| 黄色精品视频| 国产97免费视| 一区二区三区短视频| 97精品视频在线播放| 色呦呦在线看| 美女啪啪无遮挡免费久久网站| 在线免费黄色| 在线观看亚洲区| 国产精品免费播放| 亚洲欧美日韩一区在线| 亚洲日本国产精品| 日韩成人免费视频| 无码国产精品高潮久久99| 精品国产1区二区| 丰满熟妇乱又伦| 亚洲电影免费观看高清完整版在线观看 | 色综合天天天天做夜夜夜夜做| 日韩免费在线视频观看| 亚洲福中文字幕伊人影院| 免费在线观看国产精品| 一区二区三区色| 国产无码精品久久久| 婷婷六月综合网| www欧美在线| 欧美日韩国产综合新一区| 国产污视频在线看| 欧美午夜精品久久久久久人妖 | 日韩av在线播放中文字幕| 日韩 欧美 高清| 日本欧美久久久久免费播放网| 欧美婷婷精品激情| 极品美女销魂一区二区三区| 亚洲无在线观看| 国产一区二区三区在线观看免费视频 | 97青娱国产盛宴精品视频| 欧美视频一区二区在线观看| 久久久久国产视频| 亚洲国产精品国自产拍久久| 日韩欧美国产精品| 亚洲欧美高清视频| 亚洲福利视频二区| 国产精品无码一区二区三区| 蜜臂av日日欢夜夜爽一区| 午夜免费看视频| 国产精品原创巨作av| 丰满岳乱妇一区二区| 久久综合久久综合亚洲| 91l九色lporny| 亚洲午夜免费| 韩日精品视频一区| 久久亚洲国产成人精品无码区| 欧美喷水视频| 日本人体一区二区| 午夜亚洲一区| 天天干天天综合| 国产精品中文字幕欧美| 国产网站无遮挡| 国产精品热久久久久夜色精品三区| 午夜国产小视频| 午夜精品一区二区三区免费视频| 日本免费在线观看视频| 欧美二区三区的天堂| 欧美一区二不卡视频| 亚洲一区二区国产| 亚洲电影视频在线| 日韩女优在线播放| 日本精品视频| 欧美一进一出视频| 欧美成人tv| 久久久精品在线视频| 国产一区二区三区国产| 久久中文字幕人妻| 亚洲免费观看高清在线观看| 人人干人人干人人干| 欧美精品自拍偷拍动漫精品| 天堂av在线播放| 久久这里有精品| 欧美激情喷水| 97久久夜色精品国产九色| 国产aⅴ精品一区二区三区久久| 日本高清视频免费在线观看| 久久一区亚洲| 岛国精品资源网站| 亚洲天堂2014| 一级特黄免费视频| 亚洲国产99精品国自产| 米奇777四色精品人人爽| 欧美与欧洲交xxxx免费观看| 亚洲无线观看| av动漫免费观看| 美女91精品| 国产精品无码网站| 一区二区三区四区激情| 中文字幕日本人妻久久久免费 | 538在线视频观看| zzijzzij亚洲日本少妇熟睡| 极品久久久久久| 91久久精品一区二区三区| 黄色av一区二区三区| 久久亚洲精品国产亚洲老地址| 国产综合色区在线观看| 精品在线不卡| 伊人久久大香线蕉综合热线| 中文国产在线观看| 国产精品欧美一区喷水| 日韩熟女一区二区| 亚洲美女av网站| 中文不卡1区2区3区| 精品国产一区二区三| 亚洲欧洲视频| 成人性生活免费看| 亚洲午夜国产一区99re久久| av免费在线不卡| 久久激情五月丁香伊人| 欧美成a人片免费观看久久五月天| 欧美一区少妇| 久久免费高清| 精品人伦一区二区三电影 | 亚洲网站免费观看| 一区二区av在线| 成人涩涩视频| 亚洲欧美影院| 久久精品国产在热久久| 欧美自拍偷拍网| 欧美色综合影院| 香蕉视频在线免费看| 91精品久久久久久| 91国语精品自产拍| 一级日本黄色片| 一区二区高清免费观看影视大全 | 91在线精品一区二区| 青青操免费在线视频| 亚洲精品在线视频| 韩国精品主播一区二区在线观看| 日日噜噜噜噜夜夜爽亚洲精品| 日本在线播放一区二区三区| 中文字幕求饶的少妇| 91精品国产91久久久久久最新毛片| 成人在线网址| 国产精品免费看一区二区三区| 国产精品普通话对白| 欧美人与性囗牲恔配| 91精品国产欧美一区二区成人| 欧美人与禽猛交乱配| 久久精品国产美女| 免费观看一级特黄欧美大片| 国产午夜手机精彩视频| 欧美va在线播放| 日韩免费va| 亚洲欧洲国产精品久久| 欧美一区二区三区在线观看| av网站在线观看免费| 久久免费视频在线| 国产精品视频一区二区三区四蜜臂| 一道本视频在线观看| 一区二区免费视频| 国产在线日本| 亚洲自拍小视频免费观看| 亚洲一区一卡| 婷婷伊人五月天| 亚洲女人被黑人巨大进入al| 国产精品欧美一区二区三区不卡| 国产素人在线观看| 中文字幕在线一区| 少妇一级淫片免费看| 91精品国产综合久久男男 | 国产精品手机在线播放 | 国产91av在线播放| 欧美成人午夜剧场免费观看| 亚洲三级性片| 国产精品无码自拍| 欧美性猛交一区二区三区精品| 国产蜜臀在线| 一本一生久久a久久精品综合蜜|