摘要:以此類推,循環(huán)到最后一個數(shù)停止。例如樣本數(shù)組的樣本總數(shù)是則要進行輪。直到最小數(shù)到達最后面的位置,然后進行下一輪。代碼冒泡算法排序參與排序的隨機數(shù)組,手動隨機冒泡排序外循環(huán)的冒泡次數(shù)是次。
冒泡排序
對樣本數(shù)組進行比較循環(huán)
從頭開始依次比較大小,交換位置,然后再跟相鄰的下一個數(shù)進行比較,再交換位置
一輪比較完畢以后,進行下一次的比較,還是從樣本頭開始比較,比較次數(shù)比上一次的次數(shù)減少一次,因為有一個數(shù)在上一輪比較中已經(jīng)歸位。
以此類推,循環(huán)到最后一個數(shù)停止。
$arr = [15, 32, 78,13, 58, 52, 63, 22, 14, 55];
樣本數(shù)組的樣本總數(shù)是10,則要進行$i=(10-1)輪。
每輪再進行10-$i次的相鄰數(shù)($i的起始值是1)的比較,直至該輪的結(jié)束,數(shù)字歸位
。
如果是從大到小,那么比較左邊的數(shù)和右邊的數(shù)誰更小,更小的向右交換位置,以此類推。直到最小數(shù)到達最后面的位置,然后進行下一輪。
"; //冒泡排序: 外循環(huán)的冒泡次數(shù)是N-1次。因為若干個數(shù)冒泡,樣本中的最后一個數(shù)是不需要進行排序的 for ($i = 1; $i < count($arr) -1; $i++) { //樣本數(shù)是10,$i<9,則$i的依次取值是1,2,3,4,5,6,7,8 /** * $j的取值范圍最多到count($arr) - 2 ,因為$j+1的取值范圍最大是count($arr) ; * * 由于$j的取值是取決于 count($arr) - $i */ for ($j = 0; $j < count($arr) - $i; $j++) {//某一次的冒泡排序次數(shù)是 樣本數(shù)減去$i的值, $j的依次取值是0-8,0-7,...,0-2 if ($arr[$j] < $arr[$j+1]) { //這邊的比較符號決定排序順序。 $t = $arr[$j]; $arr[$j] = $arr[$j+1]; $arr[$j+1] = $t; } } } foreach ($arr as $arr_l){ echo $arr_l."--"; }
時間復(fù)雜度為O(N^2),算法較為浪費時間
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/22435.html
摘要:經(jīng)過一次冒泡排序,最終在無序表中找到一個最大值,第一次冒泡結(jié)束。也是我們后面要說的冒泡排序的優(yōu)化。冒泡排序只執(zhí)行第一層循環(huán),而不會執(zhí)行第二層循環(huán)。因此冒泡排序的時間復(fù)雜度是。 showImg(https://user-gold-cdn.xitu.io/2019/6/19/16b6f986df6880f9?w=640&h=142&f=gif&s=17175);showImg(https:...
摘要:之所以把冒泡排序選擇排序插入排序放在一起比較,是因為它們的平均時間復(fù)雜度都為。其中,冒泡排序就是原地排序算法。所以冒泡排序是穩(wěn)定的排序算法。選擇排序思路選擇排序算法的實現(xiàn)思路有點類似插入排序,也分已排序區(qū)間和未排序區(qū)間。 showImg(https://segmentfault.com/img/bVbuvnj?w=900&h=250); 1. 前言 算法為王。 想學(xué)好前端,先練好內(nèi)功,...
摘要:本文對一些排序算法進行了簡單分析,并給出了的代碼實現(xiàn)。平均時間復(fù)雜度不好分析,它是冒泡排序是穩(wěn)定的排序算法。冒泡排序是原地排序算法原地排序指的是空間復(fù)雜度是的排序算法。歸并排序,會將數(shù)組從中間分成左右兩部分。 本文對一些排序算法進行了簡單分析,并給出了 javascript 的代碼實現(xiàn)。因為本文包含了大量的排序算法,所以分析不會非常詳細,適合有對排序算法有一定了解的同學(xué)。本文內(nèi)容其實不...
摘要:多練練排序算法,不僅能夠讓我們知道一些排序方法的底層實現(xiàn)細節(jié),更能夠鍛煉我們的思維,提升編程能力。排序算法的穩(wěn)定性一個穩(wěn)定的排序,指的是在排序之后,相同元素的前后順序不會被改變,反之就稱為不穩(wěn)定。 1. 導(dǎo)言 因為這是排序算法系列的第一篇文章,所以多啰嗦幾句。 排序是很常見的算法之一,現(xiàn)在很多編程語言都集成了一些排序算法,比如Java 的Arrays.sort()方法,這種方式讓我們可...
摘要:一前言冒泡排序是一種交換排序。以升序冒泡排序為例,冒泡排序就是要每趟排序過程中通過兩兩比較相鄰元素,將小的數(shù)字放到前面,大的數(shù)字放在后面。所以,冒泡排序最好時間復(fù)雜度為。因此,冒泡排序的平均時間復(fù)雜度為。 一、前言 冒泡排序是一種交換排序。 什么是交換排序呢? 解:兩兩比較待排序的關(guān)鍵字,并交換不滿足次序要求的那對數(shù),直到整個表都滿足次序要求為止。 二、算法思想 它重復(fù)地走訪要排序的...
閱讀 1753·2021-09-26 09:46
閱讀 3035·2021-09-22 15:55
閱讀 2626·2019-08-30 14:17
閱讀 3043·2019-08-26 11:59
閱讀 1824·2019-08-26 11:35
閱讀 3165·2019-08-26 10:45
閱讀 3165·2019-08-23 18:28
閱讀 1159·2019-08-23 18:21