Bubble Sort,bubblesort
Jun 13, 2016 am 09:21 AMBubble Sort,bubblesort
8 numbers. Sort as ascend.
?
1st loop, compare 7 times (for 8 numbers), and found the largest 8.
2nd loop, compare 6 times (for 7 numbers), and found the largest 7.
. . .
?
1, 7, 8
2, 6, 7
3, 5, 6
4, 4, 5
5, 3, 4
6, 2, 3
7, 1, 2
?
In conclusion:?For sorting 8 numbers, we need an outer loop of 7 times, each time for finding a largest number; and an inner loop from comparing 7 times to comparing 1 time (as in the center column).
?
Implementation in PHP:?
<span> 1</span> <?<span>php </span><span> 2</span> <span>/*</span><span> bubble sort: </span><span> 3</span> <span> 1. operate directly on the input array (&), not on a copy </span><span> 4</span> <span> 2. sort as ascend </span><span> 5</span> <span> 6</span> <span> a is array </span><span> 7</span> <span> m is length of a </span><span> 8</span> <span> n is times of outer loop, n-i is times of comparing for each outer loop </span><span> 9</span> <span> i/j is for-loop counter </span><span>10</span> <span> w is for value swap </span><span>11</span> <span>*/</span> <span>12</span> <span>function</span> sortBubble(&<span>$a</span><span>){ </span><span>13</span> <span>$m</span> = <span>count</span>(<span>$a</span><span>); </span><span>14</span> <span>$n</span> = <span>$m</span> - 1<span>; </span><span>15</span> <span>for</span>(<span>$i</span>=0; <span>$i</span><<span>$n</span>; <span>$i</span>++<span>){ </span><span>16</span> <span>for</span>(<span>$j</span>=0; <span>$j</span><<span>$n</span>-<span>$i</span>; <span>$j</span>++<span>){ </span><span>17</span> <span>if</span>(<span>$a</span>[<span>$j</span>] > <span>$a</span>[<span>$j</span>+1<span>]){ </span><span>18</span> <span>$w</span> = <span>$a</span>[<span>$j</span><span>]; </span><span>19</span> <span>$a</span>[<span>$j</span>] = <span>$a</span>[<span>$j</span>+1<span>]; </span><span>20</span> <span>$a</span>[<span>$j</span>+1] = <span>$w</span><span>; </span><span>21</span> <span> } </span><span>22</span> <span>else</span><span>{ </span><span>23</span> <span>//</span><span> do nothing</span> <span>24</span> <span> } </span><span>25</span> <span> } </span><span>26</span> <span>//</span><span> see the results after each outer loop </span><span>27</span> <span> // echo implode(', ', $a).'<br />';</span> <span>28</span> <span> } </span><span>29</span> <span>} </span><span>30</span> <span>31</span> <span>$arr</span> = <span>array</span>(9, 5, 2, 7, 3<span>); </span><span>32</span> sortBubble(<span>$arr</span><span>); </span><span>33</span> <span>echo</span> <span>implode</span>(', ', <span>$arr</span><span>); </span><span>34</span> <span>35</span> <span>//</span><span> 2, 3, 5, 7, 9</span> <span>37</span> ?>
?
冒泡排序詳細(xì)注釋:
冒泡排序詳細(xì)注釋:
/* 用冒泡排序法對(duì)一維整型數(shù)組中的十個(gè)數(shù)升序排序 */
#include
#include
int main()
{
int i,j,t,a[10];
printf("Please input 10 integers:\n");
for(i=0;iscanf("%d",&a[i]);
for(i=0;ifor(j=0;jif(a[j]>a[j+1])
{t=a[j];/* 交換a[i]和a[j] */
a[j]=a[j+1];
a[j+1]=t;
}
printf("The sequence after sort is:\n");
for(i=0;iprintf("%-5d",a[i]);
printf("\n");
system("pause");
return 0;
}
其中i=0時(shí):
j從0開始a[0],a[1]比較大小,把其中的較大者給a[1],然后j++,a[1]和a[2]再比較,再把兩者中的
較大者給a[2],這樣a[0],a[1],a[2]中的最大者已經(jīng)交換到a[2]中,這個(gè)過程繼續(xù),直到j(luò)=10-i-1=9這樣
a[9]中的為10個(gè)數(shù)中的最大數(shù)。
然后i=1時(shí):
由于最大數(shù)已找到并放到a[9]中,所以這一次循環(huán)j最大只需到10-i-1=8,即a[8]即可,再次從j=0開始a[j]和a[j+1]兩兩比較交換,最后次大數(shù)放到a[8]中
然后i++,繼續(xù)...
當(dāng)i=9時(shí)已經(jīng)過9次兩兩比較完成所有排序,i對(duì)于n個(gè)數(shù),只需要進(jìn)行n-1次外循環(huán)的兩兩比較就完成排序。
至于按降序排列只需將if(a[j]>a[j+1])改為if(a[j]
-------------------------------------------------------------------
/* 用改進(jìn)型冒泡排序法對(duì)一維整型數(shù)組中的十個(gè)數(shù)升序排序 */
#include
#include
int main()
{int i,j,t,a[10],flag;
printf("Please input 10 integers:\n");
for(i=0;iscanf("%d",&a[i]);
for(i=0;i{ flag=0;
for(j=0;jif(a[j]>a[j+1])
{ t=a[j]; /* 交換a[i]和a[j] */
a[j]=a[j+1];
a[j+1]=t;
flag=1;
}
if(flag==0)break;
}
printf("The sequence after sort is:\n&......余下全文>>
?
/* 用冒泡排序法對(duì)一維整型數(shù)組中的十個(gè)數(shù)升序排序 */
#include
#include
int main()
{
int i,j,t,a[10];
printf("Please input 10 integers:\n");
for(i=0;iscanf("%d",&a[i]);
for(i=0;ifor(j=0;jif(a[j]>a[j+1])
{t=a[j];/* 交換a[i]和a[j] */
a[j]=a[j+1];
a[j+1]=t;
}
printf("The sequence after sort is:\n");
for(i=0;iprintf("%-5d",a[i]);
printf("\n");
system("pause");
return 0;
}
其中i=0時(shí):
j從0開始a[0],a[1]比較大小,把其中的較大者給a[1],然后j++,a[1]和a[2]再比較,再把兩者中的
較大者給a[2],這樣a[0],a[1],a[2]中的最大者已經(jīng)交換到a[2]中,這個(gè)過程繼續(xù),直到j(luò)=10-i-1=9這樣
a[9]中的為10個(gè)數(shù)中的最大數(shù)。
然后i=1時(shí):
由于最大數(shù)已找到并放到a[9]中,所以這一次循環(huán)j最大只需到10-i-1=8,即a[8]即可,再次從j=0開始a[j]和a[j+1]兩兩比較交換,最后次大數(shù)放到a[8]中
然后i++,繼續(xù)...
當(dāng)i=9時(shí)已經(jīng)過9次兩兩比較完成所有排序,i對(duì)于n個(gè)數(shù),只需要進(jìn)行n-1次外循環(huán)的兩兩比較就完成排序。
至于按降序排列只需將if(a[j]>a[j+1])改為if(a[j]
-------------------------------------------------------------------
/* 用改進(jìn)型冒泡排序法對(duì)一維整型數(shù)組中的十個(gè)數(shù)升序排序 */
#include
#include
int main()
{int i,j,t,a[10],flag;
printf("Please input 10 integers:\n");
for(i=0;iscanf("%d",&a[i]);
for(i=0;i{ flag=0;
for(j=0;jif(a[j]>a[j+1])
{ t=a[j]; /* 交換a[i]和a[j] */
a[j]=a[j+1];
a[j+1]=t;
flag=1;
}
if(flag==0)break;
}
printf("The sequence after sort is:\n&......余下全文>>
?

熱AI工具

Undress AI Tool
免費(fèi)脫衣圖片

Undresser.AI Undress
人工智慧驅(qū)動(dòng)的應(yīng)用程序,用於創(chuàng)建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Clothoff.io
AI脫衣器

Video Face Swap
使用我們完全免費(fèi)的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

熱工具

記事本++7.3.1
好用且免費(fèi)的程式碼編輯器

SublimeText3漢化版
中文版,非常好用

禪工作室 13.0.1
強(qiáng)大的PHP整合開發(fā)環(huán)境

Dreamweaver CS6
視覺化網(wǎng)頁開發(fā)工具

SublimeText3 Mac版
神級(jí)程式碼編輯軟體(SublimeText3)

熱門話題

資料結(jié)構(gòu)與演算法是Java開發(fā)的基礎(chǔ),本文深入探討Java中的關(guān)鍵資料結(jié)構(gòu)(如陣列、鍊錶、樹等)和演算法(如排序、搜尋、圖演算法等)。這些結(jié)構(gòu)透過實(shí)戰(zhàn)案例進(jìn)行說明,包括使用陣列儲(chǔ)存分?jǐn)?shù)、使用鍊錶管理購物清單、使用堆疊實(shí)現(xiàn)遞歸、使用佇列同步執(zhí)行緒以及使用樹和雜湊表進(jìn)行快速搜尋和身份驗(yàn)證等。理解這些概念可以編寫高效且可維護(hù)的Java程式碼。

函數(shù)指標(biāo)技術(shù)可提升程式碼效率和可重複使用性,具體表現(xiàn)為:提升效率:使用函數(shù)指標(biāo)可減少重複程式碼,優(yōu)化呼叫過程。提高可重複使用性:函數(shù)指標(biāo)允許使用通用函數(shù)處理不同數(shù)據(jù),提高程式的可重複使用性。

Go語言是一種越來越流行的程式語言,它被設(shè)計(jì)成易於編寫、易於閱讀和易於維護(hù)的語言,同時(shí)也支援高階程式設(shè)計(jì)概念。時(shí)間複雜度和空間複雜度是演算法和資料結(jié)構(gòu)分析中重要的概念,它們衡量一個(gè)程式的執(zhí)行效率和占用記憶體大小。在本文中,我們將重點(diǎn)分析Go語言中的時(shí)間複雜度和空間複雜度。時(shí)間複雜度時(shí)間複雜度是指演算法執(zhí)行時(shí)間與問題規(guī)模之間的關(guān)係。通常用大O表示法來表示時(shí)間

如何實(shí)作C#中的冒泡排序演算法冒泡排序是一種簡(jiǎn)單但有效的排序演算法,它透過多次比較相鄰的元素並交換位置來排列一個(gè)陣列。在本文中,我們將介紹如何使用C#語言實(shí)作冒泡排序演算法,並提供具體的程式碼範(fàn)例。首先,讓我們來了解冒泡排序的基本原理。演算法從數(shù)組的第一個(gè)元素開始,與下一個(gè)元素進(jìn)行比較。如果當(dāng)前元素比下一個(gè)元素大,則交換它們的位置;如果當(dāng)前元素比下一個(gè)元素小,則保持

算法是解決問題的指令集,其執(zhí)行速度和內(nèi)存佔(zhàn)用各不相同。編程中,許多算法都基於數(shù)據(jù)搜索和排序。本文將介紹幾種數(shù)據(jù)檢索和排序算法。線性搜索假設(shè)有一個(gè)數(shù)組[20,500,10,5,100,1,50],需要查找數(shù)字50。線性搜索算法會(huì)逐個(gè)檢查數(shù)組中的每個(gè)元素,直到找到目標(biāo)值或遍歷完整個(gè)數(shù)組。算法流程圖如下:線性搜索的偽代碼如下:檢查每個(gè)元素:如果找到目標(biāo)值:返回true返回falseC語言實(shí)現(xiàn):#include#includeintmain(void){i

如何寫自訂PHP數(shù)組排序演算法?冒泡排序:透過比較和交換相鄰元素來排序數(shù)組。選擇排序:每次選擇最小或最大元素並與目前位置交換。插入排序:逐一插入元素到有序部分。

PHP陣列排序演算法複雜度:冒泡排序:O(n^2)快速排序:O(nlogn)(平均)歸併排序:O(nlogn)

雲(yún)端運(yùn)算中資料結(jié)構(gòu)和演算法的使用至關(guān)重要,用於管理和處理大量資料。常見的資料結(jié)構(gòu)包括數(shù)組、列表、哈希表、樹和圖。常用的演算法有排序演算法、搜尋演算法和圖演算法。利用Java的強(qiáng)大功能,開發(fā)者可以使用Java集合、執(zhí)行緒安全資料結(jié)構(gòu)和ApacheCommonsCollections來實(shí)作這些資料結(jié)構(gòu)和演算法。
