搜尋
首頁php教程PHP开发冒泡排序的三種實現
冒泡排序的三種實現Dec 19, 2016 pm 01:15 PM
冒泡排序

冒泡排序是非常容易理解和實現,,以從小到大排序舉例:

設數組長度為N。

1.比較相鄰的前後二個數據,如果前面數據大於後面的數據,就將二個數據交換。

2.這樣對數組的第0個資料到N-1個資料進行一次遍歷後,最大的一個資料就「沉」到數組第N-1個位置。

3. N=N-1,若N不為0就重複前面二步,否則排序完成。

 

按照定義很容易寫出代碼:

//冒泡排序1  
void BubbleSort1(int a[], int n)  
{  
       int i, j;  
       for (i = 0; i < n; i++)  
              for (j = 1; j < n - i; j++)  
                     if (a[j - 1] > a[j])  
                            Swap(a[j - 1], a[j]);  
}

下面對其進行優化,設定一個標誌,如果這一趟發生了交換,則為true,否則為false。明顯如果有一趟沒有發生交換,表示排序已經完成。

//冒泡排序2  
void BubbleSort2(int a[], int n)  
{  
       int j, k;  
       bool flag;  
  
       k = n;  
       flag = true;  
       while (flag)  
       {  
              flag = false;  
              for (j = 1; j < k; j++)  
                     if (a[j - 1] > a[j])  
                     {  
                            Swap(a[j - 1], a[j]);  
                            flag = true;  
                     }  
              k--;  
       }  
}

再做進一步的最佳化。如果有100個數的數組,僅前面10個無序,後面90個都已排好序且都大於前面10個數字,那麼在第一趟遍歷後,最後發生交換的位置必定小於10,且這個位置之後的資料必定已經有序了,記錄下這位置,第二次只要從陣列頭部遍歷到這個位置就可以了。

//冒泡排序3  
void BubbleSort3(int a[], int n)  
{  
    int j, k;  
    int flag;  
      
    flag = n;  
    while (flag > 0)  
    {  
        k = flag;  
        flag = 0;  
        for (j = 1; j < k; j++)  
            if (a[j - 1] > a[j])  
            {  
                Swap(a[j - 1], a[j]);  
                flag = j;  
            }  
    }  
}

冒泡排序畢竟是一種效率低下的排序方法,在資料規模很小時,可以採用。資料規模比較大時,最好用其它排序方法。


更多冒泡排序的三種實現相關文章請關注PHP中文網!

陳述
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
如何实现C#中的冒泡排序算法如何实现C#中的冒泡排序算法Sep 19, 2023 am 11:10 AM

如何实现C#中的冒泡排序算法冒泡排序是一种简单但有效的排序算法,它通过多次比较相邻的元素并交换位置来排列一个数组。在本文中,我们将介绍如何使用C#语言实现冒泡排序算法,并提供具体的代码示例。首先,让我们了解一下冒泡排序的基本原理。算法从数组的第一个元素开始,与下一个元素进行比较。如果当前元素比下一个元素大,则交换它们的位置;如果当前元素比下一个元素小,则保持

PHP 数组自定义排序算法的编写指南PHP 数组自定义排序算法的编写指南Apr 27, 2024 pm 06:12 PM

如何编写自定义PHP数组排序算法?冒泡排序:通过比较和交换相邻元素来排序数组。选择排序:每次选择最小或最大元素并将其与当前位置交换。插入排序:逐个插入元素到有序部分。

各种 PHP 数组排序算法的复杂度分析各种 PHP 数组排序算法的复杂度分析Apr 27, 2024 am 09:03 AM

PHP数组排序算法复杂度:冒泡排序:O(n^2)快速排序:O(nlogn)(平均)归并排序:O(nlogn)

C++ 函数性能优化中的算法选择与优化技巧C++ 函数性能优化中的算法选择与优化技巧Apr 23, 2024 pm 06:18 PM

C++函数性能优化算法选择:选择高效算法(如快速排序、二分查找)。优化技巧:内联小型函数、优化缓存、避免深拷贝、循环展开。实战案例:查找数组最大元素位置时,优化后采用二分查找和循环展开,大幅提升性能。

分析 Go 语言中的时间复杂度和空间复杂度分析 Go 语言中的时间复杂度和空间复杂度Mar 27, 2024 am 09:24 AM

Go语言是一种越来越流行的编程语言,它被设计成易于编写、易于阅读和易于维护的语言,同时也支持高级编程概念。时间复杂度和空间复杂度是算法和数据结构分析中重要的概念,它们衡量着一个程序的执行效率和占用内存大小。在本文中,我们将重点分析Go语言中的时间复杂度和空间复杂度。时间复杂度时间复杂度是指算法执行时间与问题规模之间的关系。通常用大O表示法来表示时间

冒泡事件的含义是什么冒泡事件的含义是什么Feb 19, 2024 am 11:53 AM

冒泡事件是指在Web开发中,当一个元素上触发了某个事件后,该事件将会向上层元素传播,直到达到文档根元素。这种传播方式就像气泡从底部逐渐冒上来一样,因此被称为冒泡事件。在实际开发中,了解和理解冒泡事件的工作原理对于正确处理事件十分重要。下面将通过具体的代码示例来详细介绍冒泡事件的概念和使用方法。首先,我们创建一个简单的HTML页面,其中包含一个父级元素和三个子

如何使用C++中的冒泡排序算法如何使用C++中的冒泡排序算法Sep 19, 2023 pm 05:12 PM

如何使用C++中的冒泡排序算法冒泡排序算法是一种简单但不高效的排序算法,它通过多次比较和交换来将一个序列按照从小到大(或者从大到小)的顺序排列。这里我们将介绍如何使用C++语言实现冒泡排序算法,并附上详细的代码示例。算法原理:冒泡排序算法的基本思想是从待排序的序列中逐个比较相邻的元素,如果前一个元素大于后一个元素,则交换这两个元素的位置。这样一次比较过后,最

PHP算法:如何使用冒泡排序提高数组排序效率?PHP算法:如何使用冒泡排序提高数组排序效率?Sep 19, 2023 am 10:28 AM

PHP算法:如何使用冒泡排序提高数组排序效率?冒泡排序是一种简单但效率较低的排序算法,但我们可以通过一些优化策略提高冒泡排序的效率。本文将介绍如何使用PHP中的冒泡排序算法优化数组的排序过程,并提供具体的代码示例。冒泡排序的基本原理是,每次从数组的第一个元素开始,依次比较相邻两个元素的大小,如果前一个元素大于后一个元素,则交换它们的位置。这样一轮比较下来,最

See all articles

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

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

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

AI Hentai Generator

AI Hentai Generator

免費產生 AI 無盡。

熱門文章

R.E.P.O.能量晶體解釋及其做什麼(黃色晶體)
3 週前By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.最佳圖形設置
3 週前By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.如果您聽不到任何人,如何修復音頻
3 週前By尊渡假赌尊渡假赌尊渡假赌
WWE 2K25:如何解鎖Myrise中的所有內容
3 週前By尊渡假赌尊渡假赌尊渡假赌

熱工具

SublimeText3 英文版

SublimeText3 英文版

推薦:為Win版本,支援程式碼提示!

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

WebStorm Mac版

WebStorm Mac版

好用的JavaScript開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

SublimeText3 Linux新版

SublimeText3 Linux新版

SublimeText3 Linux最新版