摘要:導(dǎo)語(yǔ)冒泡排序是相對(duì)比較簡(jiǎn)單常用的算法,同時(shí)在面試中也是最常被問(wèn)到的問(wèn)題。冒泡排序?qū)€(gè)項(xiàng)目需要的比較次數(shù),且可以原地排序。冒泡排序算法的運(yùn)作如下比較相鄰的元素。
導(dǎo)語(yǔ)
冒泡排序是相對(duì)比較簡(jiǎn)單、常用的算法,同時(shí)在面試中也是最常被問(wèn)到的問(wèn)題。自認(rèn)能力不夠,不能有更深的理解,下面就把一些資料中的內(nèi)容記錄下來(lái),文末有原文鏈接。
冒泡排序冒泡排序(英語(yǔ):Bubble Sort)是一種簡(jiǎn)單的排序算法。它重復(fù)地走訪過(guò)要排序的數(shù)列,一次比較兩個(gè)元素,如果他們的順序錯(cuò)誤就把他們交換過(guò)來(lái)。走訪數(shù)列的工作是重復(fù)地進(jìn)行直到?jīng)]有再需要交換,也就是說(shuō)該數(shù)列已經(jīng)排序完成。這個(gè)算法的名字由來(lái)是因?yàn)樵叫〉脑貢?huì)經(jīng)由交換慢慢“浮”到數(shù)列的頂端。
冒泡排序?qū)?n 個(gè)項(xiàng)目需要 O(n2) 的比較次數(shù),且可以原地排序。盡管這個(gè)算法是最簡(jiǎn)單了解和實(shí)現(xiàn)的排序算法之一,但它對(duì)于包含大量的元素的數(shù)列排序是很沒(méi)有效率的。
冒泡排序算法的運(yùn)作如下:
比較相鄰的元素。如果第一個(gè)比第二個(gè)大,就交換他們兩個(gè)。
對(duì)每一對(duì)相鄰元素作同樣的工作,從開(kāi)始第一對(duì)到結(jié)尾的最后一對(duì)。這步做完后,最后的元素會(huì)是最大的數(shù)。
針對(duì)所有的元素重復(fù)以上的步驟,除了最后一個(gè)。
持續(xù)每次對(duì)越來(lái)越少的元素重復(fù)上面的步驟,直到?jīng)]有任何一對(duì)數(shù)字需要比較。
以上是維基百科中的介紹,可以看到,原理并不復(fù)雜。但是在數(shù)據(jù)量大時(shí),不是一個(gè)很好的選擇。
動(dòng)圖演示需要注意的是,下圖與實(shí)例中的代碼,順序是相反的。
$arr[$k]) { // 前者大于后者,調(diào)換位置 // 如果想要按照從大到小進(jìn)行排序,改為 $arr[$i] < $arr[$k] $temp = $arr[$i]; $arr[$i] = $arr[$k]; $arr[$k] = $temp; } } } return $arr; } print_r(bubbleSort($arr)); // Array ( [0] => 2 [1] => 3 [2] => 8 [3] => 16 [4] => 21 [5] => 23 [6] => 24 [7] => 32 [8] => 33 )
參考資料:冒泡排序、PHP冒泡排序(Bubble Sort)算法詳解、GIF演示排序算法。
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://www.ezyhdfw.cn/yun/30030.html
摘要:一冒泡排序原理對(duì)一組數(shù)據(jù),比較相鄰數(shù)據(jù)的大小,將值小數(shù)據(jù)在前面,值大的數(shù)據(jù)放在后面。通過(guò)以上五輪排序,若干次比較,我們有理由推斷出一個(gè)結(jié)論對(duì)于一個(gè)長(zhǎng)度為的數(shù)組,我們需要排序輪,每輪要比較次。 一、冒泡排序 原理:對(duì)一組數(shù)據(jù),比較相鄰數(shù)據(jù)的大小,將值小數(shù)據(jù)在前面,值大的數(shù)據(jù)放在后面。 (以下都是升序排列,即從小到大排列) 舉例說(shuō)明: $arr = array(6, 3, 8,...
摘要:良好的排序算法具有進(jìn)行最少的比較和交換的特征。冒泡排序是一個(gè)基于比較的排序算法,被認(rèn)為是效率最低的排序算法之一?,F(xiàn)在讓我們使用實(shí)現(xiàn)冒泡排序算法。插入排序到目前為止,我們已經(jīng)看到了兩種基于比較的排序算法。 預(yù)警 本文適合對(duì)于排序算法不太了解的新手同學(xué)觀看,大佬直接忽略即可。因?yàn)榭紤]到連貫性,所以篇幅較長(zhǎng)。老鐵們看完需要大概一個(gè)小時(shí),但是從入門到完全理解可能需要10個(gè)小時(shí)(哈哈哈,以我自己...
摘要:概念這里借用百度百科的一張圖來(lái),非常形象快速排序算法是對(duì)冒泡算法的一個(gè)優(yōu)化。獲取已經(jīng)打亂了順序的數(shù)組快速排序這里引用的是我之前寫的冒泡算法排序冒泡運(yùn)行結(jié)果 概念 這里借用百度百科的一張圖來(lái),非常形象:showImg(https://segmentfault.com/img/bVdlR6); 快速排序算法是對(duì)冒泡算法的一個(gè)優(yōu)化。他的思想是先對(duì)數(shù)組進(jìn)行分割, 把大的元素?cái)?shù)值放到一個(gè)臨時(shí)數(shù)...
摘要:本文將介紹快速排序計(jì)數(shù)排序梳排序堆排序歸并排序希爾排序選擇排序插入排序地精排序聯(lián)合冒泡排序雞尾酒排序冒泡排序奇偶排序使用標(biāo)志的冒泡排序種排序算法的實(shí)現(xiàn)。是一種不穩(wěn)定的排序算法。 本文將介紹快速排序、計(jì)數(shù)排序、梳排序、堆排序、歸并排序、希爾排序、選擇排序、插入排序、地精排序、聯(lián)合冒泡排序、雞尾酒排序、冒泡排序、奇偶排序、使用標(biāo)志的冒泡排序14種排序算法的實(shí)現(xiàn)。本文是由于閱讀了文章《測(cè)試評(píng)...
摘要:它的基本思想是通過(guò)一趟排序?qū)⒁判虻臄?shù)據(jù)分割成獨(dú)立的兩部分,其中一部分的所有數(shù)據(jù)都比另外一部分的所有數(shù)據(jù)都要小,然后再按此方法對(duì)這兩部分?jǐn)?shù)據(jù)分別進(jìn)行快速排序,整個(gè)排序過(guò)程可以遞歸進(jìn)行,以此達(dá)到整個(gè)數(shù)據(jù)變成有序序列。 選擇排序 選擇排序主要是將假設(shè)數(shù)組中的第一個(gè)是最小的,循環(huán)與數(shù)組中的第一個(gè)進(jìn)行比較 如果比其還小 則記錄下標(biāo) 進(jìn)行數(shù)值交換 效率相對(duì)冒泡來(lái)說(shuō)比較高 function s...
閱讀 3405·2021-11-08 13:12
閱讀 2934·2021-10-15 09:41
閱讀 1571·2021-10-08 10:05
閱讀 3431·2021-10-08 10:04
閱讀 2281·2021-09-29 09:34
閱讀 2643·2019-08-30 15:55
閱讀 3059·2019-08-30 15:45
閱讀 2714·2019-08-29 14:17