色综合老司机第九色激情 _中文字幕日韩av资源站_国产+人+亚洲_久久久精品影院_久久久视频免费观看_欧美激情亚洲自拍_亚洲成av人片在线观看香蕉_热草久综合在线_欧美极品第一页_2020国产精品自拍

千鋒教育-做有情懷、有良心、有品質(zhì)的職業(yè)教育機構(gòu)

手機站
千鋒教育

千鋒學(xué)習(xí)站 | 隨時隨地免費學(xué)

千鋒教育

掃一掃進(jìn)入千鋒手機站

領(lǐng)取全套視頻
千鋒教育

關(guān)注千鋒學(xué)習(xí)站小程序
隨時隨地免費學(xué)習(xí)課程

當(dāng)前位置:首頁  >  技術(shù)干貨  > 排序算法中的冒泡和選擇排序

排序算法中的冒泡和選擇排序

來源:千鋒教育
發(fā)布人:zyh
時間: 2023-06-12 14:32:00 1686551520

  全文大約【4400】字,不說廢話,只講可以讓你學(xué)到技術(shù)、明白原理的純干貨!本文帶有豐富的案例及配圖視頻,讓你更好地理解和運用文中的技術(shù)概念,并可以給你帶來具有足夠啟迪的思考......

排序算法中的冒泡和選擇排序

  一. 排序算法

  1.概念

  所謂排序,就是使一串記錄可以按照其中某個或某些關(guān)鍵字的大小,根據(jù)遞增或遞減的排列起來。而排序算法,就是使得數(shù)據(jù)按照特定要求排列的方法。我們在開發(fā)時常用的排序算法有如下幾個:

  ● 直接插入排序

  ● 希爾排序

  ● 簡單選擇排序

  ● 堆排序

  ● 冒泡排序

  ● 快速排序

  ● 歸并排序

  ● 基數(shù)排序法

  2.排序算法分類

  以上排序算法都屬于內(nèi)部排序,也就是只考慮較小數(shù)據(jù)量且僅需使用內(nèi)存的排序算法,他們之間關(guān)系如下圖所示:

1686295714482.image

  因為實際上具體的排序算法非常多,小編這個是Java的系列學(xué)習(xí)文章,所以我這里不會把每個算法都講解到。后面我會出一個專門的算法系列文章,敬請大家持續(xù)關(guān)注哦。

  接下來小編就以冒泡、選擇排序算法為例,重點給大家講解一下排序相關(guān)的內(nèi)容。

  二. 冒泡排序

  1.概念

  冒泡排序(Bubble Sort),可以說是我們學(xué)習(xí)編程時必學(xué)且知名度最高的一個經(jīng)典排序算法,同時也是各種考試和面試中出鏡率最高的一個排序算法。

  首先,我們要知道一點,冒泡排序?qū)儆诮粨Q排序算法的一種。所謂交換排序算法,是指在排序過程中,要發(fā)生數(shù)組元素的交換。

  之所以要把該算法稱為“冒泡算法”,這是因為每個大的元素,每次經(jīng)過交換都會慢慢“浮”到數(shù)組的頂端,故名“冒泡排序”。

  冒泡排序的核心思想,是把相鄰的元素進(jìn)行兩兩比較,當(dāng)一個元素大于右側(cè)相鄰的元素時,就交換它們的位置;當(dāng)一個元素小于或等于右側(cè)相鄰的元素時,則保持位置不變。大家注意,冒泡排序只會操作相鄰的兩個數(shù)據(jù)。每次冒泡操作都是對相鄰的兩個元素進(jìn)行比較,看是否滿足大小關(guān)系。

  2.實現(xiàn)步驟

  接下來小編就以一個數(shù)值型的數(shù)組為例,向大家介紹冒泡排序的整個排序過程。

  假設(shè),我們現(xiàn)在有一個待排序的數(shù)組,其數(shù)組元素值依次為[5,8,6,3,9,,2,1,,7]。如果我們采用冒泡排序算法,按從小到大的規(guī)則對其排序,其詳細(xì)過程會如下所示:

  (1). 將5和8進(jìn)行比較,因為滿足左小右大的規(guī)則,不需要交換,保持元素位次不變;

  (2). 將8和6進(jìn)行比較,因不滿足左小右大的規(guī)則,則需要交換。將8和6位置互換,互換位置后,元素6在下標(biāo)1這個位置上,元素8在下標(biāo)2這個位置上;

  (3). 接著將8和3進(jìn)行比較,不滿足左小右大規(guī)則,需要交換。將8和3位置互換,互換位置后,元素3在下標(biāo)2的位置上,元素8在下標(biāo)3的位置上;

  (4). 繼續(xù)將8和9進(jìn)行比較,滿足左小右大規(guī)則,不需要交換,保持元素位次不變;

  (5). 將9和2進(jìn)行比較,不滿足左小右大的規(guī)則,需要交換。將9和2位置互換,互換位置后,元素2在下標(biāo)4的位置上,元素9在下標(biāo)5的位置上;

  (6). 將9和1進(jìn)行比較,不滿足左小右大的規(guī)則,需要交換。將9和1位置互換,互換位置后,元素1在下標(biāo)5的位置上,元素9在下標(biāo)6的位置上。

  (7). 繼續(xù)將9和7進(jìn)行比較,不滿足左小右大的規(guī)則,需要交換。互換位置后,元素7在下標(biāo)6的位置上,元素9在下標(biāo)7的位置上。

  如果我們把上述的文字描述,轉(zhuǎn)換為圖片,則會如下圖所示:

1686295771091.image

  這樣就完成了第一輪的交換比較。經(jīng)過第一輪交換后,元素9作為數(shù)列中最大的元素,就像是汽水里的氣泡一樣浮到了最右側(cè)。接著我們繼續(xù)如此重復(fù)上述的比較過程,每一輪結(jié)束后,都會有一個本輪最大的元素被移到了最右側(cè),如下所示:

1686295779932.image

  每一輪的排序結(jié)果最終會如上圖所示,所以最終的排序結(jié)果就是最后一排的數(shù)值結(jié)果。最后我們來總結(jié)下,冒泡排序算法的3個核心步驟:

  ● 第1步:比較相鄰的元素。如果第一個元素比第二個元素大,就將兩者交換;

  ● 第2步:對每一對相鄰的兩個元素進(jìn)行同樣的操作。從開始第一對到結(jié)尾的最后一對,最后的元素就是最大的數(shù)。

  ● 第3步:針對所有元素重復(fù)以上步驟。每重復(fù)一輪上述步驟,需要操作的元素就會越來越少,直到?jīng)]有任何一對元素需要比較。

  這樣我們就理解了冒泡排序的實現(xiàn)思路和過程,接下來我們再來看看該如何在Java中通過代碼實現(xiàn)冒泡排序。

  3. 編碼實現(xiàn)

  我們根據(jù)上述冒泡排序算法的文字描述步驟,利用Java語言進(jìn)行編程實現(xiàn),代碼如下所示:  

public static void bubbleSort(int[] arr) {
int count = 0;
for (int i = 0; i < arr.length - 1; i++) {
for (int j = 0; j < arr.length - 1-i; j++) {
count++;
//臨時變量 用于交換
int tmp = 0;
if (arr[j] > arr[j + 1]) {
tmp = arr[j];
arr[j] = arr[j + 1];
arr[j + 1] = tmp;
}
}
}
}

  最終執(zhí)行完上述代碼后,arr數(shù)組就變成了一個有序的數(shù)組。

  大家要注意,在上述代碼中,bubbleSort方法可以接收一個整數(shù)類型的數(shù)組arr,通過兩層for循環(huán),最終就可以實現(xiàn)整型數(shù)組元素的冒泡排序。其中:

  ● 內(nèi)層for循環(huán)是將相鄰的兩個元素進(jìn)行比較。如果不滿足左小右大的規(guī)則,就將兩個元素進(jìn)行交換。

  ● 交換相鄰的元素時,使用到了臨時變量tmp。

  ● 外層for循環(huán),用來控制需要進(jìn)行幾輪比較,即比較的輪次。

  4. 算法總結(jié)

  通過上述Java程序,我們就實現(xiàn)了冒泡算法的代碼實現(xiàn),最后小編再來給大家總結(jié)一下冒泡排序算法的時間和空間復(fù)雜度等情況。

  (1). 冒泡排序的平均時間復(fù)雜度是O(n²)。如果數(shù)組本身已經(jīng)排好了順序,在優(yōu)化后的算法中,需要比較n-1次,此時的時間復(fù)雜度是O(n)。而當(dāng)數(shù)組是無序的,在優(yōu)化后的算法中,需要比較的次數(shù)是n(n-1)/2次,此時的時間復(fù)雜度是O(n²)。

  (2). 冒泡排序的空間復(fù)雜度為O(1) 。

  (3). 冒泡排序是原地排序。

  (4). 冒泡排序的重點是左右相鄰的兩個元素進(jìn)行兩兩比較,當(dāng)兩個元素數(shù)值相同時不換位,所以是穩(wěn)定排序。

  三. 選擇排序

  1.概念

  選擇排序(Selection Sort)是一種最簡單直觀的排序算法。即使在我們的日常生活中,大家可能都會經(jīng)常無意地進(jìn)行選擇排序。比如我們?nèi)コ匈I蘋果,你拿了一個袋子,從眾多的蘋果中挑了一個最大的放入袋中,然后又從剩下的蘋果中挑了一個最大的放入袋子。這樣如此反復(fù),直到挑夠了需要的蘋果去結(jié)賬。這其實就是選擇排序的實現(xiàn)思想,就是不斷地從未排序的元素中選擇最大(或最小)的元素,放入到已排好序的元素集合中,直到未排序的元素為空。

  基于上述實現(xiàn)思想,我們就可以提取出選擇排序的實現(xiàn)原理:

  將一個數(shù)組分成有序的區(qū)間和無序的區(qū)間兩部分,初始時有序區(qū)間為空,每次從無序區(qū)間中選出最小的元素,并放到有序區(qū)間的末尾,直到無序區(qū)間為空。

  2.實現(xiàn)思路

  按照選擇排序的實現(xiàn)原理,接下來小編再把選擇排序的實現(xiàn)思路再細(xì)化一下:

  ● 假設(shè),給定一個數(shù)組 int[] arr = {n個數(shù)據(jù)};

  ● 第1趟排序,在無序數(shù)列 arr[0] ~ arr[n-1]中選出最小的數(shù)據(jù),將它與arr[0]交換;

  ● 第2趟,在無序數(shù)列 arr[1] ~ arr[n-1]中選出最小的數(shù)據(jù),將它與arr[1]交換;

  ● 依此類推,第i趟在無序數(shù)列arr[i]~arr[n-1]中選出最小的數(shù)據(jù),將它與arr[i]交換,直到全部排序完成。

  但是如何選出最小的一個元素呢?

  我們先任意選一個元素,假設(shè)它就是最小的元素(默認(rèn)為無序區(qū)間的第一個元素),然后讓這個元素與無序區(qū)間中的每一個元素挨個進(jìn)行比較。如果遇到比自己小的元素,則更新最小值的下標(biāo),直到把無序區(qū)間遍歷完。最后的那個最小值下標(biāo)對應(yīng)的數(shù)值,就是該無序區(qū)間的最小值。

  3.實現(xiàn)步驟

  同樣的,小編仍然以一個示例來給大家解釋選擇排序的實現(xiàn)步驟。假如我們現(xiàn)在有一個待排序的數(shù)組[5,8,6,3,9,2,1,7],若采用選擇排序算法進(jìn)行排序,其實現(xiàn)步驟如下:

  (1). 初始化待排序數(shù)組[5,8,6,3,9,2,1,7];

  (2). 從待排序數(shù)組中,選出最小值1,和第一個元素5進(jìn)行交換,即將最小的元素放在下標(biāo)0的位置上;

  (3). 在剩下的無序區(qū)間的元素中,選擇最小的元素2,并將最小的元素2與無序區(qū)間的第一個元素8進(jìn)行交換。交換后,有序區(qū)間的元素變?yōu)?個,分別是1和2,剩余的為無序區(qū)間。

  (4). 依次類推,將所有的元素通過不斷選擇的方式,按有序的方式放到有序區(qū)間,最終把整個數(shù)組全部排好順序。

  我們把上述選擇排序的文字描述內(nèi)容,變成對應(yīng)的圖片,會如下圖所示:

1686295877011.image

1686295881785.image

1686295885122.image

1686295892961.image (1)

  4.編碼實現(xiàn)

  接下來小編也使用Java語言,把選擇排序的算法通過編程給大家實現(xiàn)一下: 

public static void selectionSort(int[] arr) {
int count = 0;
//第一個循環(huán)用來遍歷數(shù)組中的所有數(shù)字
for (int i = 0; i < arr.length; i++) {
//初始化一個變量,用來記錄最小數(shù)字的下標(biāo)。初始默認(rèn)假設(shè)第一個數(shù)字就是最小數(shù)字
int minIndex = i;
//第二個循環(huán),通過比較獲取數(shù)組中最小的數(shù)字的下標(biāo)
for (int j = i + 1; j < arr.length; j++) {
count++;
//如果找到更小的數(shù)字
if (arr[minIndex] > arr[j]) {
//將minIndex變量的值修改為新的最小數(shù)字的下標(biāo)
minIndex = j;
}
}
//所有數(shù)字一個個比較結(jié)束之后,就能確認(rèn)那個數(shù)字最小了。
//將最小的數(shù)字替換到第一個位置,將第一個位置的數(shù)字放到最小數(shù)字原來的位置,就是一次交換。
arr[i] = arr[i] + arr[minIndex] - (arr[minIndex] = arr[i]);
}
}

  5.算法總結(jié)

  選擇排序基于最簡單的思路,依次把待排序的數(shù)據(jù)放入到已經(jīng)排好序的數(shù)列中,并繼續(xù)保持有序。但選擇排序的效率較低,時間復(fù)雜度是O(n2)。另外隨著排序的數(shù)據(jù)量增長,效率降低的會很快。這里小編也把選擇排序給大家總結(jié)一下,核心要點如下:

  (1). 選擇排序最大的特點,就是不論數(shù)列是否有序或亂序,選擇排序都要花費一樣的時間來計算。比如,利用選擇排序?qū)?shù)組[1, 2, 3, 4, 5]和[3, 1, 4, 2, 5]排序,其所需要執(zhí)行的步驟是一樣的。如果用冒泡排序執(zhí)行已經(jīng)排好序的數(shù)列,則只需要一輪比較就可以得出結(jié)果。

  (2). 選擇排序算法,無論是已排好序或未排序,都需要循環(huán)比較n(n-1)/2次。當(dāng)n->∞時,無限接近于n²,所以選擇排序算法的時間復(fù)雜度為O(n²)。

  (3). 選擇排序算法的空間復(fù)雜度是O(1)。

  (4). 選擇排序算法是原地排序算法,且會發(fā)生數(shù)據(jù)交換操作。

  (5). 選擇排序是一種簡單的排序算法,適用于數(shù)據(jù)量較小的情況。根據(jù)時間復(fù)雜度分析,選擇排序所花費的時間會隨著數(shù)據(jù)量增大按照平方倍數(shù)增?,數(shù)據(jù)量越大,排序效率就越低。但是選擇排序也有優(yōu)勢,即它的實現(xiàn)思維邏輯特別簡單,比較容易理解。

tags: 排序算法
聲明:本站稿件版權(quán)均屬千鋒教育所有,未經(jīng)許可不得擅自轉(zhuǎn)載。
10年以上業(yè)內(nèi)強師集結(jié),手把手帶你蛻變精英
請您保持通訊暢通,專屬學(xué)習(xí)老師24小時內(nèi)將與您1V1溝通
免費領(lǐng)取
今日已有369人領(lǐng)取成功
劉同學(xué) 138****2860 剛剛成功領(lǐng)取
王同學(xué) 131****2015 剛剛成功領(lǐng)取
張同學(xué) 133****4652 剛剛成功領(lǐng)取
李同學(xué) 135****8607 剛剛成功領(lǐng)取
楊同學(xué) 132****5667 剛剛成功領(lǐng)取
岳同學(xué) 134****6652 剛剛成功領(lǐng)取
梁同學(xué) 157****2950 剛剛成功領(lǐng)取
劉同學(xué) 189****1015 剛剛成功領(lǐng)取
張同學(xué) 155****4678 剛剛成功領(lǐng)取
鄒同學(xué) 139****2907 剛剛成功領(lǐng)取
董同學(xué) 138****2867 剛剛成功領(lǐng)取
周同學(xué) 136****3602 剛剛成功領(lǐng)取
相關(guān)推薦HOT
PUE是什么?

一、PUE是什么PUE,即功耗比(Power Usage Effectiveness),是數(shù)據(jù)中心的能源效率指標(biāo)。它是數(shù)據(jù)中心總功耗與設(shè)備功耗的比值,用于評估數(shù)據(jù)中...詳情>>

2023-10-15 07:13:07
graph cut和graph cuts有什么區(qū)別?

1.語境不同graph cut”通常在描述一個操作時使用,比如”perform a graph cut”,它指的是在圖中找到一個切割,將圖劃分為兩個...詳情>>

2023-10-15 07:02:16
什么是雙機熱備?

一、雙機熱備的原理雙機熱備是指在系統(tǒng)中配置兩臺服務(wù)器(主服務(wù)器和備份服務(wù)器),兩者通過高速網(wǎng)絡(luò)連接進(jìn)行實時數(shù)據(jù)同步和狀態(tài)同步。主服務(wù)器...詳情>>

2023-10-15 06:37:02
偏最小二乘支持向量機和支持向量機回歸的區(qū)別是什么?

1.模型構(gòu)建的理論基礎(chǔ)不同支持向量機回歸(SVR)基于統(tǒng)計學(xué)習(xí)理論,其主要思想是找到一個超平面,使得大部分?jǐn)?shù)據(jù)點都在這個超平面的一定范圍內(nèi),...詳情>>

2023-10-15 06:30:45
VAE、GAN和transformer有什么區(qū)別?

1.模型結(jié)構(gòu)不同VAE(變分自編碼器)是一種生成模型,其基于概率圖模型和自編碼器,能夠?qū)W習(xí)數(shù)據(jù)的潛在分布。GAN(生成對抗網(wǎng)絡(luò))同樣是一種生成...詳情>>

2023-10-15 06:10:12
色综合老司机第九色激情 _中文字幕日韩av资源站_国产+人+亚洲_久久久精品影院_久久久视频免费观看_欧美激情亚洲自拍_亚洲成av人片在线观看香蕉_热草久综合在线_欧美极品第一页_2020国产精品自拍
午夜成人免费视频| 欧美性猛片aaaaaaa做受| 精品成人在线观看| 91在线国产福利| 美女视频黄 久久| 一区二区三区.www| 日本一区二区三区免费乱视频| 欧美日韩精品一二三区| 成人avav影音| 国产成人免费高清| 久久国产精品第一页| 亚洲韩国一区二区三区| 国产精品久久久久久久久动漫| 日韩美女一区二区三区四区| 欧美午夜免费电影| www.亚洲精品| 国产不卡一区视频| 看片的网站亚洲| 日韩不卡一区二区| 亚洲电影你懂得| 一区二区三区免费| 中文字幕一区二区三区在线播放 | 成人app软件下载大全免费| 韩国精品主播一区二区在线观看 | 国产午夜精品一区二区三区四区| 欧美一级理论性理论a| 在线观看91精品国产麻豆| 色av综合在线| 欧洲精品一区二区| 日本道精品一区二区三区| 91片在线免费观看| 91蝌蚪porny| 一本色道久久加勒比精品 | 91精品国产综合久久福利软件| 欧美三级日韩三级| 欧美日韩精品免费观看视频| 欧美午夜寂寞影院| 欧美高清视频不卡网| 制服丝袜av成人在线看| 91精品国产色综合久久| 日韩精品一区二区三区在线观看| 日韩欧美一区二区视频| 精品国内二区三区| 国产欧美日韩精品a在线观看| 国产精品色呦呦| 亚洲欧美电影一区二区| 一区二区欧美视频| 日韩成人伦理电影在线观看| 喷水一区二区三区| 国产在线不卡视频| 顶级嫩模精品视频在线看| 99这里都是精品| 在线观看免费一区| 91精品国产综合久久久蜜臀图片| 亚洲精品在线观看视频| 国产精品麻豆久久久| 一二三区精品视频| 男女男精品网站| 丁香六月久久综合狠狠色| 国产精品一区二区在线观看网站| 成人精品国产福利| 欧美视频一区二区三区| 日韩欧美不卡在线观看视频| 精品久久久久久最新网址| 国产欧美一区在线| 一二三四社区欧美黄| 美国欧美日韩国产在线播放| 丰满岳乱妇一区二区三区| 一本大道久久精品懂色aⅴ| 欧美一区三区二区| 中文欧美字幕免费| 午夜精品久久久久久久99水蜜桃| 激情综合网最新| 日本韩国欧美一区二区三区| 51精品秘密在线观看| 国产欧美日韩三区| 亚洲大片免费看| 国产黑丝在线一区二区三区| 在线视频欧美精品| 久久这里只有精品首页| 亚洲精品菠萝久久久久久久| 九九国产精品视频| 色丁香久综合在线久综合在线观看| 日韩欧美一级二级三级久久久| 国产精品久久久久久久久图文区| 日韩影院精彩在线| 99久久综合精品| 欧美精品tushy高清| 国产精品久久久久久久久免费丝袜| 五月婷婷综合激情| 波多野结衣视频一区| 日韩一区二区在线看片| 亚洲欧美日韩中文播放| 韩国av一区二区三区在线观看| 色狠狠综合天天综合综合| 久久人人爽爽爽人久久久| 亚洲高清久久久| 成人av高清在线| 欧美精品一区二区久久婷婷| 亚洲国产美女搞黄色| 成人午夜av在线| www久久精品| 日韩在线a电影| 在线观看日韩高清av| 国产精品视频你懂的| 激情图区综合网| 欧美高清性hdvideosex| 亚洲女人****多毛耸耸8| 国产精品66部| 日韩免费一区二区| 亚洲成人www| 色美美综合视频| 亚洲欧洲av色图| 成人综合在线网站| 久久久久综合网| 蜜桃视频一区二区三区| 欧美日韩高清一区| 亚洲综合精品久久| 一本一本大道香蕉久在线精品| 中文字幕第一区| 国产精品99久| 国产日本欧美一区二区| 国产主播一区二区| 日韩欧美精品三级| 日产精品久久久久久久性色| 欧美日韩一区三区| 一区二区三区国产精华| 色香蕉成人二区免费| 亚洲图片激情小说| 99精品黄色片免费大全| 综合婷婷亚洲小说| 一本色道a无线码一区v| 亚洲乱码中文字幕| 色婷婷综合久久| 亚洲国产综合91精品麻豆| 欧美午夜精品理论片a级按摩| 一区二区三区四区中文字幕| 91一区二区三区在线播放| 中文字幕亚洲不卡| 91一区二区三区在线观看| 亚洲男人的天堂一区二区| 91视频.com| 一个色在线综合| 制服丝袜亚洲色图| 久久99精品国产麻豆婷婷| 精品噜噜噜噜久久久久久久久试看| 老汉av免费一区二区三区| 精品久久久久久最新网址| 国产精品资源网| 国产精品视频一二三| 97se亚洲国产综合自在线观| 亚洲美女视频在线| 欧美蜜桃一区二区三区| 老汉av免费一区二区三区 | 国产主播一区二区| 欧美激情中文字幕一区二区| 成人美女视频在线观看| 国产精品视频在线看| 91豆麻精品91久久久久久| 亚洲成av人片在线| 欧美成人三级电影在线| 国内精品久久久久影院一蜜桃| 国产日韩欧美精品在线| 99精品黄色片免费大全| 婷婷开心激情综合| 欧美成人女星排名| 成人不卡免费av| 亚洲成a人在线观看| xfplay精品久久| 91激情在线视频| 久久国产欧美日韩精品| 国产精品不卡在线观看| 欧美日韩另类一区| 国产精品综合在线视频| 亚洲女同一区二区| 日韩美女主播在线视频一区二区三区| 成人免费看片app下载| 亚洲国产视频直播| 26uuu精品一区二区三区四区在线 26uuu精品一区二区在线观看 | 国产女人18水真多18精品一级做| 99re亚洲国产精品| 日本美女一区二区三区| 国产欧美日韩麻豆91| 欧美日韩精品免费观看视频| 国产激情视频一区二区在线观看 | 欧美一区二区福利视频| 国产成人午夜精品影院观看视频 | 精品少妇一区二区三区视频免付费| 成人午夜视频免费看| 婷婷亚洲久悠悠色悠在线播放| 久久久久久99精品| 欧美色精品在线视频| 国产精品1024| 天天综合网 天天综合色| 国产清纯白嫩初高生在线观看91 | 国产精品资源在线| 五月婷婷综合在线| 亚洲日本欧美天堂| 精品免费99久久| 欧美老女人在线|