詳解氣泡排序及Python3程式碼實現
下面詳細介紹氣泡排序的思想以及python3程式碼實現。
首先是這樣一個常識:在水中兩個相同深度的氣泡,大的氣泡上浮的快,最先上浮到水面。
然後假設有一個列表儲存著一組資料,如下所示:左端為裡表中的元素,右端為索引。
為什麼要豎著放,這樣可以給你‘冒泡’的感覺。當然我們很容易看出來8是最大的會最先浮出水面,但是計算機不會想我們這樣‘看’。它只會一步步來,首先假設第一個數(索引為0的數為最大的會先浮出水面),然後與相鄰的數(索引比它大的)比較。這裡發現8>2,所以更正假設:這時候認為8是會最先浮出水面的,然後與相鄰的交大索引的數比較,發現4<8,也就是說上面的4應該會晚於8浮出水面,這時候就需要交換位置,從上到下是7,3,8,4,2。這時候計算機仍然認為8是上浮最快的,然後依次與4和2比較,並且交換位置,交換完後從上到下的順序為8,7,3,4,2. 這時候計算機找到了最大的那個氣泡8.並認為最先浮出水面(然後只需要比較剩下的氣泡誰先浮出水面即可)。然後計算機再從索引0開始,直到n-2(最大的已經浮出水面)。n個元素的列表一共需要從索引0開始迴圈n-1次(每次選出剩餘氣泡中最大的,最後一個不需要再比較),每次迴圈需要比較的次數是n-1-i(i為大迴圈次數)。這裡有一點可以優化的地方:就是一次迴圈下來發現一次交換也沒有,說明剩下的氣泡已經按順序排列了,就不需要再迴圈了。詳細程式碼如下:
__author__ = "Allen Liu" __time__ = "2017/8/13" '''This program used to ''' import random # 定義氣泡排序函式 def bubble_sort(data): for i in range(len(data) - 1):# 外迴圈每一次使得有序的數增加一個 indicator = False # 用於優化(沒有交換時表示已經有序,結束迴圈) for j in range(len(data) - 1 - i):#內迴圈每次講無序部分中的最大值放到最上面 if data[j] > data[j + 1]: data[j], data[j+1] = data[j+1], data[j] indicator = True if not indicator:#如果沒有交換說明列表已經有序,結束迴圈 break # 驗證演算法正確性 data = list(range(10))#產生一個有序列表 random.shuffle(data) # 呼叫shuffle函式打亂順序 print(data)# 排序前 bubble_sort(data)# 呼叫氣泡排序演算法 print(data)#排序後
相關推薦
詳解氣泡排序及Python3程式碼實現
下面詳細介紹氣泡排序的思想以及python3程式碼實現。 首先是這樣一個常識:在水中兩個相同深度的氣泡,大的氣泡上浮的快,最先上浮到水面。 然後假設有一個列表儲存著一組資料,如下所示:左端為裡表中的元素,右端為索引。 為什麼要豎著放,這樣可以給你‘冒泡’的感覺。當然我們很
Menu詳解(一):程式碼實現系統選單及子選單
前言:這周看到選單部分,以前也對選單有過使用,但並沒有系統的對選單進行梳理。這次藉著這個機會,對選單進行梳理。但只是很淺顯的系統講解,即對選單的種類及各種用法作了一些講述,並沒有對如何使用自定義的選單佈局做講述,等下次有機會再次遇到的時候再補充吧,一下搞太多,有點吃不消,很累
排序演算法之快速排序,氣泡排序用python程式碼實現
一、快速排序 1.在列表中選出一個基準數(通常為列表的第一個數) 2.將列表中小於基準數的資料移到基準列表的左邊,將大於基準數的資料移到基準數的右邊 3.對於基準數左,右兩邊的列表,不斷重複以上兩個過程,直到每個子集只有一個元素, 即為全部有序的. def qu
堆排序及GOLANG程式碼實現
堆排序及GOLANG程式碼實現 版權宣告:本文為博主原創文章,未經博主允許不得轉載。 https://blog.csdn.net/mofiu/article/details/83620743 一、什麼是堆排序 堆排序是利用堆這種資料結構而設計的一種排序演算法,堆排序是一
新手必看——JAVA排序詳解(氣泡排序和插入排序)
對於排序,它一直不厭其煩的出現在企業面試初級工程師的筆試題中,不管是氣泡排序還是插入排序,我們經常會在在初級面試題中遇見,就好像它已成為一種面試的標準。而對於程式設計師來說,基本排序就真的這麼重要嗎?當然不,作為一個老司機的我們已經知道,對於新手很心累的各種
詳解氣泡排序--適用於初學者,包會
1.氣泡排序的基本思想就是:每次都比較兩個相鄰的元素,如果他們的順序錯誤就把他們的位置調換過來; 2.例如 5 9 7 6 1 8 13 4 他們每次都是兩兩比較,所以每一輪要比較n-i次(升續
八大排序演算法詳解——氣泡排序
基本思想 將被排序的記錄陣列R[0..n-1]垂直排列,每個記錄R[i]看作是重量為R[i].key的氣泡。根據輕氣泡不能在重氣泡之下的原則,從下往上掃描陣列R:凡掃描到違反本原則的輕氣泡,就使其 向上”飄浮”。如此反覆進行,直到最後任何兩個氣泡都是輕者在上,重者在下為止。 具體過程,如下所示:
Java氣泡排序及快速排序詳解
氣泡排序 氣泡排序是一種簡單的排序演算法。它重複地走訪過要排序的數列,一次比較兩個元素,如果他們的順序錯誤就把他們交換過來。走訪數列的工作是重複地進行直到沒有再需要交換,也就是說該數列已經排序完成。這個演算法的名字由來是因為越小的元素會經由交換慢慢“浮”到數列的頂端。
氣泡排序及優化詳解
演算法思想 氣泡排序屬於一種典型的交換排序。 交換排序顧名思義就是通過元素的兩兩比較,判斷是否符合要求,如過不符合就交換位置來達到排序的目的。氣泡排序名字的由來就是因為在交換過程中,類似水冒泡,小(大)的元素經過不斷的交換由水底慢慢的浮到水的頂端。 氣泡排序的思想就是利用的比較交換,利用迴圈
邏輯迴歸(Logistic Regression)詳解,公式推導及程式碼實現
邏輯迴歸(Logistic Regression) 什麼是邏輯迴歸: 邏輯迴歸(Logistic Regression)是一種基於概率的模式識別演算法,雖然名字中帶"迴歸",但實際上是一種分類方法,在實際應用中,邏輯迴歸可以說是應用最廣泛的機器學習演算法之一 迴歸問題怎麼解決分類問題? 將樣本的特徵和
EJB2.0教程 詳解EJB技術及實現原理
tee nsa 普通 事情 println 配置 ransac 教程 聲明 EJB是什麽呢?EJB是一個J2EE體系中的組件.再簡單的說它是一個能夠遠程調用的javaBean.它同普通的javaBean有兩點不同.第一點,就是遠程調用.第二點,就是事務的功能,我們在EJB中
詳解AMD規範及具體實現requireJS在工程中的使用
當前頁 eid 資源 自己 一個數 中比 ocs 網站 重定位 由CommonJS組織提出了許多新的JavaScript架構方案和標準,希望能為前端開發提供統一的指引。AMD規範就是其中比較著名一個,全稱是Asynchronous Module Definition
常用排序演算法java程式碼實現---快速排序,氣泡排序,選擇排序
快速排序 public class QuickSort { public void qSort(int[] arr,int left,int right) { if(left>right) { return ; } int i = le
Java常用的八種排序演算法與程式碼實現(一):氣泡排序法、插入排序法、選擇排序法
這三種排序演算法適合小規模資料排序 --- 共同點:基於比較,時間複雜度均為O(n2),空間複雜度均為O(1)(原地排序演算法) 不同點:插入排序和氣泡排序是穩定的排序演算法,選擇排序不是 --- 穩定排序演算法:可以保持數值相等的兩個物件,在排序之
Python四大流行排序演算法詳解--快速排序-氣泡排序-選擇排序-插入排序。
就作者而言使用Python經常用到的排序演算法就是快速排序、氣泡排序、選擇排序以及插入排序 就時間複雜度而言,快速排序是高階排序,查詢快速,時間複雜度為nlgn 而氣泡排序、選擇排序、插入排序則是比較低階的查詢演算法,時間複雜度為n**2 下面
java sort用法(陣列排序及集合排序) Java排序方法sort的使用詳解 Java排序方法sort的使用詳解
Java排序方法sort的使用詳解 對陣列的排序: 1 2
JAVAWEB開發之Lucene詳解——Lucene入門及使用場景、全文檢索、索引CRUD、優化索引庫、分詞器、高亮、相關度排序、各種查詢
Lucene入門 應用場景 windows系統中的有搜尋功能:開啟“我的電腦”,按“F3”就可以使用查詢的功能,查詢指定的檔案或資料夾。搜尋的範圍是整個電腦中的檔案資源。 Eclipse中的幫助子系統:點選Help->Help Contents,可以查找出相關的幫助資
Java演算法實現之氣泡排序及優化
氣泡排序,是一種很簡單的排序演算法。原理就不過多介紹了,直接入手demo。 需求:輸入一組資料,用氣泡排序進行排序。 先用最直接的方法進行排序,程式碼如下: //對一組數進行氣泡排序 public class Bubble01 { public static void m
各種排序演算法總結及C#程式碼實現
排序是計算機內經常進行的一種操作,其目的是將一組“無序”的記錄序列調整為“有序”的記錄序列。分內部排序和外部排序。若整個排序過程不需要訪問外存便能完成,則稱此類排序問題為內部排序。反之,若參加排序的記錄數量很大,整個序列的排序過程不可能在記憶體中完成,則稱此類排序問
【專案實站】 php 實現抽獎程式碼詳解【上篇】 基礎實現
基本思路:使用者生成一個隨機數,和出獎的獎品設定的隨機數比對一下。符合規則則中獎(使用者的隨機數< 獎品設定的概率值),不符則未中獎。 一 專案準備期,需求確認。和產品大哥一陣切磋後,認為需求1.0 //1 抽獎活動有起止時間 //2 獎品有限制個數的大獎,和不限次數的