1. 程式人生 > >氣泡排序演算法詳解C++程式

氣泡排序演算法詳解C++程式

(1)氣泡排序演算法:(Bubble Sort)首先肯定是一種簡單的排序演算法,它重複地走訪過要排序的數列,一次比較兩個元素,如果他們的順序錯誤就把他們交換過來。

走訪數列的工作是重複地進行直到沒有再需要交換,也就是說該數列已經排序完成。

下面舉一個簡單的例子

原始待排序陣列| 6 | 2 | 4 | 1 | 5 | 9 |

第一趟排序(外迴圈)

第一次兩兩比較6 > 2交換(內迴圈)

交換前狀態| 6 | 2 | 4 | 1 | 5 | 9 |

交換後狀態| 2 | 6 | 4 | 1 | 5 | 9 |

第二次兩兩比較,6 > 4交換

交換前狀態| 2 | 6 | 4 |

 1 | 5 | 9 |

交換後狀態| 2 | 4 | 6 | 1 | 5 | 9 |

第三次兩兩比較,6 > 1交換

交換前狀態| 2 | 4 | 6 | 1 | 5 | 9 |

交換後狀態| 2 | 4 | 1 | 6 | 5 | 9 | 

第四次兩兩比較,6 > 5交換

交換前狀態| 2 | 4 | 1 | 6 | 5 | 9 |

交換後狀態| 2 | 4 | 1 | 5 | 6 | 9 |

 第五次兩兩比較,6 < 9不交換

交換前狀態| 2 | 4 | 1 | 5 | 6 | 9 |

交換後狀態| 2 | 4 | 1 | 5 | 6 | 9 |

 

第二趟排序(外迴圈)

第一次兩兩比較2 < 4不交換

交換前狀態| 2 | 4 | 1 | 5 | 6 | 9 |

交換後狀態| 2 | 4 | 1 | 5 | 6 | 9 | 

第二次兩兩比較,4 > 1交換

交換前狀態| 2 | 4 | 1 | 5 | 6 | 9 | 

交換後狀態| 2 | 1 | 4 | 5 | 6 | 9 |

 第三次兩兩比較,4 < 5不交換

交換前狀態| 2 | 1 | 4 | 5 | 6 | 9 | 

交換後狀態| 2 | 1 | 4 | 5 | 6 | 9 |

 第四次兩兩比較,5 < 6不交換

交換前狀態| 2 | 1 | 4 | 5 | 6 |

 9 |

交換後狀態| 2 | 1 | 4 | 5 | 6 | 9 |

 第三趟排序(外迴圈)

第一次兩兩比較2 > 1交換

交換後狀態| 2 | 1 | 4 | 5 | 6 | 9 |

交換後狀態| 1 | 2 | 4 | 5 | 6 | 9 |

 第二次兩兩比較,2 < 4不交換

交換後狀態| 1 | 2 | 4 | 5 | 6 | 9 | 

交換後狀態| 1 | 2 | 4 | 5 | 6 | 9 |

 第三次兩兩比較,4 < 5不交換

交換後狀態| 1 | 2 | 4 | 5 | 6 | 9 | 

交換後狀態| 1 | 2 | 4 | 5 | 6 | 9 | 

第四趟排序(外迴圈)無交換

第五趟排序(外迴圈)無交換

排序完畢,輸出最終結果1 2 4 5 6 9

冒泡演算法之所以被叫做冒泡演算法,應為它每趟排序都可以找出待排序元素中最大或者最小的一個,是一個很形象的稱呼。

(2)C++源程式如下:

#include<iostream>

using namespace std;

#define N 10

int main()

{

int array[10];

int T=0;

cout<<"請輸入"<<N<<"個數,並用空格隔開"<<endl;

for(int i=0;i<N;i++)

{

cin>>array[i];

}

printf("排序前:\n");

for(i=0;i<N;i++)

{

cout<<array[i]<<"  ";

}

for(i=0;i<N-1;i++)

{

for(int j=0;j<N-1-i;j++)

{

if(array[j]>array[j+1])

{

T=array[j];

array[j]=array[j+1];

array[j+1]=T;

}

}

}

printf("\n排序後:\n");

for(i=0;i<N;i++)

{

cout<<array[i]<<"  ";

}

printf("\n");

return 0;

}

執行結果如下:

注;在程式中我使用了巨集定義,這樣的話使程式更加靈活,適應性更強。

相關推薦

氣泡排序演算法C++程式

(1)氣泡排序演算法:(Bubble Sort)首先肯定是一種簡單的排序演算法,它重複地走訪過要排序的數列,一次比較兩個元素,如果他們的順序錯誤就把他們交換過來。 走訪數列的工作是重複地進行直到沒有

各種排序演算法C++實現

1.氣泡排序 時間複雜度 O ( n

經典排序演算法(1)——氣泡排序演算法

分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!http://blog.csdn.net/jiangjunshow 也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!        

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

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

#關於選擇排序氣泡排序演算法

關於選擇排序與氣泡排序演算法詳解 本篇主要應C語言初學者對氣泡排序和選擇排序的一個初步介紹和認知 首先我們來認識下選擇排序 那什麼是選擇排序呢?選擇排序就是指在一推數組裡每一次從待排序的資料元素中選出最小(或最大)的一個元素,放在陣列最末的位置(最前面的位置也可

C語言實現八大排序演算法及其效能之間的

概述 排序是資料結構中的重要一節,也是演算法的重要組成部分。主要分為內部排序以及外部排序,今天我們講內部排序,也就是八大排序。 插入排序 直接插入排序 演算法思想 演算

排序演算法及實現-----------c語言

堆排序原理:   堆排序指的是將大堆(小堆)堆頂(即下標為0)元素與堆的最後一個(即下標為hp->size - 1)元素交換,hp->size–,將其餘的元素再次調整成大堆(小堆),再次將堆頂(即下標為0)元素與堆的最後一個(即下標為hp->s

Python四大流行排序演算法--快速排序-氣泡排序-選擇排序-插入排序

就作者而言使用Python經常用到的排序演算法就是快速排序、氣泡排序、選擇排序以及插入排序       就時間複雜度而言,快速排序是高階排序,查詢快速,時間複雜度為nlgn      而氣泡排序、選擇排序、插入排序則是比較低階的查詢演算法,時間複雜度為n**2 下面

插入排序演算法C++實現)

插入排序 輸入:n個數(a1,a2,...,an)。 輸出:輸入序列的一個排列(a1',a2',...,an'),使得a1'到an'為有序序列。 待排序的數稱為關鍵字key。 插入排序與平時生活中打牌時,整理手中牌的順序相似。最開始手中沒有牌,我們從桌上摸起一張牌,將它

九種經典排序演算法氣泡排序,插入排序,選擇排序,快速排序,歸併排序,堆排序,計數排序,桶排序,基數排序

綜述 最近複習了各種排序演算法,記錄了一下學習總結和心得,希望對大家能有所幫助。本文介紹了氣泡排序、插入排序、選擇排序、快速排序、歸併排序、堆排序、計數排序、桶排序、基數排序9種經典的排序演算法。針對每種排序演算法分析了演算法的主要思路,每個演算法都附上了虛擬

八大排序演算法——氣泡排序

基本思想 將被排序的記錄陣列R[0..n-1]垂直排列,每個記錄R[i]看作是重量為R[i].key的氣泡。根據輕氣泡不能在重氣泡之下的原則,從下往上掃描陣列R:凡掃描到違反本原則的輕氣泡,就使其 向上”飄浮”。如此反覆進行,直到最後任何兩個氣泡都是輕者在上,重者在下為止。 具體過程,如下所示:

常用的排序演算法C#版)

只要是搞程式設計的演算法、資料結構、作業系統、計算機組成原理這些東西都會有用到,就像醫生給人治病一樣,只有瞭解了人的內部機理、運作機制,才能很好的做到對症下藥,藥到病除。而上面所說的那些計算機理論課就好像人的內部機理一樣,我們往往都把這些東西給忽略了,而把更多的精力放在具體的程式語言實現上,當然我也是這樣,

C++ 幾種排序演算法

排序的演算法有很多種,其關鍵在於根據待排序序列的特性選擇合適的排序方式。下面將介紹不同的排序方式。 基本排序演算法 基本排序演算法主要包括插入排序,快速排序,氣泡排序等三種排序方式,下面將對這三種排序演算法分別進行分析 插入排序 假定待排序陣列序列為:data[5,2

經典排序演算法(4)——折半插入排序演算法

分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!http://blog.csdn.net/jiangjunshow 也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!        

常用Java排序演算法

  一、最小堆排序(MinHeapSort) 基本原理:對於給定的n個記錄,初始時把這些記錄看作一顆順序儲存的二叉樹,然後將其調整為一個小頂堆,然後將堆的最後一個元素與堆頂元素進行交換後,堆的最後一個元素即為最小記錄;接著講前(n-1)個元素重新調整為一個小頂堆,再將堆頂元素與當前

C程式的編譯過程

環境 在C語言的任何一種實現中,存在兩種不同的環境,分別是翻譯環境和執行環境。這兩種環境並不一定必須同時位於一臺機器上。 翻譯環境 翻譯環境即是為C語言程式碼從程式碼轉變為機器可以執行的二進位制檔案過程中所要依賴的環境。 執行環境 執行環境即用於實際執行程式碼。

基礎排序演算法與優化

1. 談談基礎排序 常見的基礎排序有選擇排序、氣泡排序和插入排序。眾所周知,他們的時間複雜度是 O(n*n)。 但是,現在要重新認識一下基礎排序演算法,尤其是“插入排序”:在近乎有序的情況下,插入排序的時間複雜度可以降低到 O(n)的程度。 因此,在處理系統日

選擇排序演算法

基本思想: 在要排序的一組數中,選出最小的一個數與第一個位置的數交換;然後在剩下的數當中再找最小的與第二個位置的數交換,如此迴圈到倒數第二個數和最後一個數比較為止。     實現: public static void selectSort(in

插入排序演算法

插入排序:時間複雜度為O(n*n)。 原理:         1、假定待排序陣列部分有序,一般取陣列的第一個元素作為有序序列,其它的n-1個元素為無序序列;        2、每次取無序序列中一個元素e(

快速排序演算法(原理、實現和時間複雜度)

快速排序是對氣泡排序的一種改進,由 C.A.R.Hoare(Charles Antony Richard Hoare,東尼·霍爾)在 1962 年提出。 快速排序的基本思想是:通過一趟排序將要排序的資料分割成獨立的兩部分,其中一部分的所有資料比另一部分的所有資料要小,再按這種方法對這兩部分資料分別進行快速排