1. 程式人生 > >知識點6:常見的排序演算法---氣泡排序

知識點6:常見的排序演算法---氣泡排序

說起排序演算法,絕對是很多公司會要求現場手寫的部分,雖然我還沒有經歷過這個,畢竟只面試了一次,但難免會在下一次出現。我原本是打算在一個章節裡面全部寫完所有的排序演算法,但想來想去,與其一窩端,不明原理的記下來,不如拆分開來,一個一個地嘗試去解釋,說明。這樣便不用擔心面試官針對你的程式碼問問題而回答不出的尷尬,同時也可以加深自己的印象,所以在這裡便將常見的排序演算法拆分開來,今天先介紹最常見的氣泡排序及其優化方案。閒話少說,精彩立即開啟:

冒泡演算法

冒泡演算法的原理:

通過對n位隨意排放的資料,進行n-1次的陣列排列。每次排列都把最大(或最小)的資料挪到陣列的最前面。直到最終全部排列完畢,就好像水裡的泡泡,一個個的往上挪,故而成為冒泡演算法。

氣泡排序的演算法(java為例):

public class BubbleSort{
    public static void main(String[] args){
        bubbleSort(testArray);
     {
    /*
    *氣泡排序演算法
    *@author:鄧明立
    */
    private void bubbleSort(int[] arrays){
            for(int i=0;i<arrays.length;i++){
            for (int j = arrays.length-1
; j > i; j--) { if(arrays[j] < arrays[j-1]){ int t =arrays[j]; arrays[j] = arrays[j-1]; arrays[j-1] = t; } } } } }

這是氣泡排序的一個實現,但是並不是最佳的氣泡排序,為什麼呢?因為在我們這個程式中,是必須經歷過所有的迴圈之後才能得出一個結果。那麼,如果我們的資料足夠簡單,只迴圈一輪便可以得到結果呢?那我們還要繼續執行所有的迴圈的話,可就在時間上有所偏頗了,怎麼辦呢?我們可以對程式進行如下的優化:新增一個監測標誌符,用來監測程式是否進行過排序,如果程式進行過排序,則標註為true。表示上一次優化過一次了,這次可能還需要優化一次。如果為false,則表示上一次沒有進行過優化,即排序已經完成,直接退出迴圈即可。在每次進行排序前,我們首先判斷上一次有沒有經歷過排序,如果為true,則繼續進行排序操作,並將識別符號重定位為false。例項如下:

優化後的氣泡排序演算法

public class BubbleSort{
    public static void main(String[] args){
        bubbleSort(testArray);
     {
    /*
    *優化的氣泡排序演算法
    *@author:鄧明立
    */
    private static void bubbleSort(int[] arrays){
        //新增監測控制符
        boolean isSort = true;
        for(int i=0;i<arrays.length-1;i++){
            if (isSort) {//如果為true,表示需要排序
                isSort = false;//退出識別符號,如果程式沒有經歷過排序,則識別符號為false
                for (int j = arrays.length-1; j > i; j--) {
                    if(arrays[j] < arrays[j-1]){
                        int t =arrays[j];
                        arrays[j] = arrays[j-1];
                        arrays[j-1] = t;
                        isSort = true;//經歷過排序之後,將識別符號設為true
                        /**
                         * 後面這段為測試程式碼,方便動態觀察排列過程,可忽略
                         */
                        for(int k = 0;k< arrays.length;k++){
                        System.out.print(arrays[k]+" ");
                        }
                        System.out.println();
                        }
                    }
                }   
            }   
        }


}

至此,關於氣泡排序的講解到一降落,但對於對氣泡排序的不同理解,其實也會有不同的實現方式,但其原理都是一樣的,只是實現思維的不一樣。所以本章可以作為你的思路參考,但不代表標準答案,因為並沒有標準答案。或者說,你基於原理,根據你自己的思路寫出來的氣泡排序演算法,就是你自己的標準演算法。因為那樣才是你最理解它的地方。
下一章:常見的排序演算法—-選擇排序,敬請期待。

相關推薦

知識點6常見排序演算法---氣泡排序

說起排序演算法,絕對是很多公司會要求現場手寫的部分,雖然我還沒有經歷過這個,畢竟只面試了一次,但難免會在下一次出現。我原本是打算在一個章節裡面全部寫完所有的排序演算法,但想來想去,與其一窩端,不明原理的記下來,不如拆分開來,一個一個地嘗試去解釋,說明。這樣便不用

常見演算法C語言中的排序演算法--氣泡排序,選擇排序,希爾排序

氣泡排序(Bubble Sort,臺灣譯為:泡沫排序或氣泡排序)是一種簡單的排序演算法。它重複地走訪過要排序的數列,一次比較兩個元素,如果他們的順序錯誤就把他們交換過來。走訪數列的工作是重複地進行直到沒有再需要交換,也就是說該數列已經排序完成。這個演算法的名字由來是因為越小

排序演算法氣泡排序(關鍵詞資料結構/演算法/排序演算法/氣泡排序

假定:有 1 個亂序的數列 nums ,其中有 n 個數。 要求:排好序之後是 從小到大 的順序。 氣泡排序演算法 程式碼 from swap import swap def bubble_sort(nums): n = len(nums) for i in rang

陣列的常見排序演算法--氣泡排序,選擇排序

陣列的排序演算法--氣泡排序,選擇排序 1.氣泡排序 基本思想 演算法實現 2.選擇排序演算法 基本思想 演算法實現 程式設計中,我們會經

常見排序演算法氣泡排序

氣泡排序 氣泡排序演算法的運作如下:(從後往前) >比較相鄰的元素。如果第一個比第二個大,就交換他們兩個。 >對每一對相鄰元素作同樣的工作,從開始第一對到結尾的最後一對。在這一點,最後

演算法常見排序演算法-氣泡排序、歸併排序、快速排序

引言     對於程式設計中琳琅滿目的演算法,本人向來是不善此道也不精於此的,而說起排序演算法,也只是會氣泡排序。還記得當初剛做開發工作面試第一家公司時,面試官便讓手寫氣泡排序(入職之後才知道,這面試官就是一個氣泡排序"病態"愛好者,逢面試必考氣泡排序-__-)。後來看吳軍的一些文章,提

java排序演算法氣泡排序

快速排序 氣泡排序的思想方法: 1.從無序序列頭部開始,進行兩兩比較,根據大小交換位置,直到最後將最大(小)的資料元素交換到了無序佇列的隊尾,從而成為有序序列的一部分; 2.下一次繼續這個過程,直到所有資料元素都排好序。演算法的核心在於每次通過兩兩比較交換位置,選出剩餘無序序列裡最大(小

排序演算法--氣泡排序(bubble sort)

氣泡排序是一個簡單的排序演算法,演算法複雜度n的平方,特點是兩兩比較,每次遍歷會將最大值或最小值放在最後,像冒泡一樣,每次的最大值或最小值,逐漸冒出,故名氣泡排序; 程式碼如下 void swap( int& a,int& b) {//資料交換的函式,這裡另類了一點,沒有

經典排序演算法 - 氣泡排序Bubble Sort

最近學習了一下排序演算法,寫篇文章記錄一下,詳細講解網上有很多,可以自己去查 氣泡排序Bubble Sort 氣泡排序是通過兩兩比較,最大的往後移,重複這一過程直到資料不再交換,則排序完成。氣泡排序的時間複雜度是O(n²),是穩定排序。 演算法描述(Java):

小甲魚 排序演算法 氣泡排序

小甲魚 排序演算法 氣泡排序   氣泡排序 基本思想:兩兩相鄰記錄的關鍵字,如果反序則交換,直到沒有反序的記錄為止 (PS  反序:大在前,小在後)   下面的程式碼不是真正意義的氣泡排序(因為比較的不是相鄰) //BubbleSort氣泡排

排序演算法----氣泡排序

氣泡排序是一種簡單的排序演算法,演算法的原理如下:      1. 比較相鄰元素,如果第一個比第二個大,就交換他們兩者之間的順序      2. 對每一對相鄰元素作相同工作,從開始第一對到結尾最後一對,第一次完畢後,最後的元素就是最

經典排序演算法——氣泡排序演算法詳解

一、演算法基本思想 (1)基本思想 氣泡排序的基本思想就是:從無序序列頭部開始,進行兩兩比較,根據大小交換位置,直到最後將最大(小)的資料元素交換到了無序佇列的隊尾,從而成為有序序列的一部分;下一次繼續這個過程,直到所有資料元素都排好序。 演算法的核心在於每次通過兩兩比較交換位置,選

python中經典排序演算法----- 氣泡排序

lt = [1, 5, 7, 3, 2] # 氣泡排序:從小到大 # 第一輪:1 5 3 2 7 # 第二輪:1 3 2 5 7 n = len(lt) # 外層迴圈控制比較多少輪 for i in range(n-1): # 內層迴圈控制元素的比較 for

排序演算法---氣泡排序

參考網址:https://www.cnblogs.com/onepixel/articles/7674659.html 氣泡排序是一種簡單的排序演算法。它重複地走訪過要排序的數列,一次比較兩個元素,如果它們的順序錯誤就把它們交換過來。走訪數列的工作是重複地進行直

排序演算法——氣泡排序

程式語言:JavaScript 演算法核心思想: 1.比較相鄰的元素,如果第一個比第二個大,就交換他們兩個 2.對每一對相鄰元素做同樣的工作 Array.prototype.bubbleSort = function () {

[排序演算法]--氣泡排序的三種實現(Java)

氣泡排序是非常好理解的,以從小到大排序為例,每一輪排序就找出未排序序列中最大值放在最後。 設陣列的長度為N: (1)比較前後相鄰的二個數據,如果前面資料大於後面的資料,就將這二個數據交換。 (2)這樣對陣列的第0個數據到N-1個數據進行一次遍歷後,最大的一個數據

三個簡單、基本的排序演算法---氣泡排序 、選擇排序、插入排序

1.氣泡排序 public class BubbleSort { public static void sort(long[] arr){ long temp; for(int i=0;i<arr.length-1;i++){ for(int j=ar

簡單排序演算法———氣泡排序

public class BubbleSortTest { public static void main(String [] args){ int arr[] = {1,3,2,0}; int arrLowToHigh[] = {1,2,3,4}

java中的排序演算法——氣泡排序

氣泡排序 工作原理: 重複的訪問要排序的序列,一次比較兩個元素,如果他們的順序錯誤就把它們交換過來,重 復進行訪問,直到排序完成,越小的元素會經過不停的交換慢慢浮到序列的最上層。 即每輪迴圈把最大的數放在最後,與選擇排序的區別,無需記錄最大數的位置,一邊比較一邊

java 排序演算法 氣泡排序

一般的氣泡排序會有重複的比較,所以需要對氣泡排序進行優化,優化後的氣泡排序 package shujujiegou; import java.util.Arrays; /** * 氣泡排序的優化演算法 * @author TomCat * */ pu