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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > java >内容正文

java

Java常用的八种排序算法与代码实现

發布時間:2024/9/30 java 21 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Java常用的八种排序算法与代码实现 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

在Java的時候,對于排序的應用需要熟練的掌握,這樣才能夠確保Java學習時候能夠有扎實的基礎能力。那Java有哪些排序算法呢?本文小千就來詳細說說Java經典的8種排序算法。

經典的排序算法有八種,分別為:

? 冒泡排序

? 選擇排序

? 插入排序

? 歸并排序

? 希爾排序

? 快速排序

? 堆排序

? 基數排序

其中冒泡排序、選擇排序、插入排序稱為三大基本排序。

雖然這三大基本排序算法時間復雜度都是O(n2),但是其實細細討論之下,還是有各自的特點的。

冒泡排序

冒泡排序法的思路

基本思路:

假設我們需要進行升序排列

進行N輪的比較,每一輪將相鄰的兩個元素依次比較,根據大小進行交換,每輪比較結束后,將最大的元素依次‘冒’到數組的末尾,經過幾輪比較后,數組就會呈現有序的狀態。

圖解:

假設對5個元素進行冒牌排序,先準備5個隨機元素:

1)第一輪中,將第一個元素(10)與相鄰的元素(20)進行比較,因為20比10大所以無需進行交換。再將第二個元素(20)與相鄰的元素(5)比較,因為20比5大,所以需要往上‘冒’,因此需要與5進行交換。

接著將第三個元素(20)與相鄰的元素進行比較,這樣經過與14和1的比較之后,因為20最大,所以被冒到了最后的位置。

2)后面每輪都按照此方法進行比較,但是需要注意,此后的每一輪都需要比前一輪少比較一次,因為前面已經確定了最大元素的位置,為了提高性能,可以不用再和后面確定了位置的元素進行比較。

3)由此可以確定,當數組的長度為N時,需要比較的輪數為N-1輪。每輪中從第一個元素開始相鄰元素兩兩進行比較,第一輪需要比較N-1次,第2輪需要比較N-2次,依次類推,實現整體排序。

冒泡排序法的代碼實現

? 首先通過一個外層的for循環確定比較的輪數,循環元素數量-1輪。

? 內部通過一個for循環實現每輪的兩兩元素比較的效果。每輪需要比較的次數都會比上一輪減少一次,通過j

? 元素兩兩比較通過array[j] > array[j+1]來實現。

冒泡排序法優化

以上的冒泡排序法還有優化的空間。因為如果一個數組已經是完全有序的情況下,冒泡排序法仍然會進行逐輪的比較,這無疑是浪費性能的行為。因此我們可以確定,當冒泡的比較中,有一輪如果沒有發生交換,則可以確定當前數組已經完全有序,后面的輪數完全不必在進行。故做以下的調整:

通過定義一個標識符isSort,如果有一輪沒有發生任何交換,則isSort就會為true,下次直接break,后面的輪數就不用再進行比較了。

選擇排序

選擇排序的思路

基本思路:

選擇排序和冒泡排序不同,選擇排序會通過一輪比較,選出最小的那個元素的下標,然后和第一個元素進行交換,這樣第一個元素的位置就可以確定了。

第二輪如法炮制,從第二個元素開始依次比較,選出最小的元素的下標,和第二個元素交換位置,這樣第二小的元素位置就確定了。

后面依次類推,直到整個數組呈現有序狀態。

選擇排序法的代碼實現

? 選擇排序比較的輪數和冒泡排序比較的輪數是一樣的

? K表示當前最小值的下標,當前是第幾輪,k就先代表第幾個元素的下標,然后依次和后面的元素進行比較,如果發現比k位置元素小的元素時,改變k的下標,這樣一輪過后k代表的位置就是本輪最小的元素,和i進行交換即可

? 如果一輪過后k==i,則說明i本來就是最小的元素,則無需交換提高性能。

插入排序

插入排序的思路

基本思路

假設一個數組已經基本有序,則這個時候插入排序就是一個不錯的選擇。插入排序是先保證左邊元素是基本有序的,然后將后面的元素依次和左邊元素進行比較,如果比較到一個比自己小的元素時就可以停止比較了,因為左邊已經呈現有序狀態,找到比自己小的元素時,就不用再往后比較了。

插入排序的代碼實現

? 插入排序的輪數和冒泡排序一樣,但是i從1開始,因為我們假設第一個元素已經是呈現有序狀態了。

? 內部循環依次從當前位置開始,和前面元素進行比較,如果找到了比自己小的元素,則停止比較,直接退出本輪比較,進行下一輪比較

總結

? 雖然三種排序法的時間復雜度都是O(N2),但是不同的場景還是會有不同的性能差異。

? 冒泡排序法是性能最差的算法,正式運用中,基本不會用冒泡排序法進行排序。

? 選擇排序將交換次數降到最低,但是比較次數仍然很大。當數據量小,并且交換耗時相對于比較耗時更多的情況下,選擇排序是個不錯的選擇。

? 基本有序的情況下,插入排序是最好的選擇,但是如果數據基本逆序的情況下,插入排序的性能和冒泡排序就基本一樣了。

? 從平均情況下來看,插入排序性能會比選擇排序略好一些。

以上就是小千整理的Java經典的八種排序算法,希望對學習Java的小伙伴有幫助。想了解更多Java知識,歡迎關注小千,后期會繼續分享Java知識。

本文來自千鋒教育,轉載請注明出處。

總結

以上是生活随笔為你收集整理的Java常用的八种排序算法与代码实现的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 17c国产精品一区二区 | 超碰超碰超碰超碰 | 播色网| 91国内精品久久久 | 国产又粗又猛又爽又黄的视频在线观看动漫 | 美女少妇一区二区 | 日本国产一级片 | 国产高h视频 | 成人国产精品一区二区 | 无码人妻精品一区二区三区66 | 男女精品视频 | 欧美一区三区 | 精品久久久久一区二区 | 一级黄色性生活视频 | 插吧插吧综合网 | 国产日产欧洲无码视频 | 动漫av网 | 玩偶姐姐在线观看免费 | 720url在线观看免费版 | 免费高清视频一区二区三区 | av青草 | 激情视频在线播放 | 成人免费一区二区三区在线观看 | 女人高潮被爽到呻吟在线观看 | 黄色性情网站 | 日韩欧美理论 | 一区二区三区视频免费视 | 97成人人妻一区二区三区 | 青青草网址 | 无码人妻精品一区二区三区66 | 三级免费黄录像 | 国产午夜在线一区二区三区 | 蛇女欲潮性三级 | 国产精品成av人在线视午夜片 | www.四虎影视.com | 久久综合久 | 老师张开让我了一夜av | 亚洲成人激情av | 水蜜桃亚洲精品 | 久久久久高清 | 成人在线观看国产 | 九色自拍视频 | 国产又色又爽又高潮免费 | 中日毛片 | 亚洲精品乱码久久久久久蜜桃不卡 | 狠狠干天天干 | 国产视频一级 | 人人爽爽人人 | 在线看福利影 | av网站不卡 | 精品动漫一区二区三区的观看方式 | 国产精品久久久久久久久久久免费看 | 自拍偷拍精品视频 | 欧美h视频在线观看 | 91成人免费看片 | 波多野结衣a级片 | 日韩精品一二三四区 | 国产精品 色| 麻豆传媒在线视频 | 国产一二三四在线 | 日韩精品视频观看 | 中文亚洲av片在线观看 | 男男做爰猛烈啪啪高 | 无限国产资源 | 人妻妺妺窝人体色www聚色窝 | 欧美午夜大片 | 最新亚洲精品 | 桃谷绘里香在线播放 | 国产一区二区三区四区精 | 国产麻豆一精品一av一免费 | 91视频网页 | 天堂在线中文网 | 91中文 | 久久久久久午夜 | 欧美大肥婆大肥bbbbb | www.激情五月 | 午夜剧场在线 | 聚色av | 精品人妻一区二区三区日产乱码卜 | av成人在线播放 | 日本少妇大战黑人 | 四虎影院永久 | 欧美日韩亚洲国产综合 | 人妻在客厅被c的呻吟 | 久久久999国产精品 天堂av中文在线 | 亚欧在线观看 | 欧洲亚洲综合 | 国产一区二区三区免费 | 777久久久精品一区二区三区 | 卡一卡二在线视频 | 少妇高潮网站 | 日韩精品视频久久 | 国产精品亚洲成在人线 | 欧美性猛交xxxx乱大交蜜桃 | 啪啪免费小视频 | 日韩高清在线一区二区 | 久久久久久黄 | 亚州成人| 国模精品一区二区三区 |