複習資料結構:排序演算法(二)——氣泡排序
這篇複習氣泡排序。
氣泡排序也是一種穩定排序、內排序。
氣泡排序的基本思想:對當前還未排好序的範圍內的全部數,自上而下對相鄰的兩個數依次進行比較和調整,讓較大的數往下沉,較小的往上冒。即:每當兩相鄰的數比較後發現它們的排序與排序要求相反時,就將它們互換。
插入排序比氣泡排序快!
上面說的是普通的氣泡排序演算法,時間複雜度是O(n^2),這種方法只能一趟排序操作只能找到一個最大值或最小值,消耗時間太多。
改進方法1:我們可以讓每趟排序中進行正向和反向兩遍冒泡的方法,一次就可以同時得到最大值和最小值,這樣一來排序的趟數減少了一半。這種方法形象來說就像振盪小球,如果兩端已經選擇出來最大值和最小值,那麼下一趟排序的時候就會縮小排序的距離,後面振盪的幅度就會減小,一直當幅度為0,是不是很像振盪小球由於阻尼的存在,不斷減少幅度,直至停止。
改進方法2:在每趟排序過程中,用標記位記錄每趟排序中最後一次交換的位置,如果最後一次交換的位置在0,那麼就說明整個陣列排序完畢。這種改進的思想是把先前排序的先驗資訊使用上,減少排序的次數。
實現程式碼:
#include<iostream>
using namespace std;
void BubbleSort(int a[], int n)
{
for(int i = 0; i < n-1; i++)
{
for(int j = 0; j < n-i-1; j++)
{
if(a[j] > a[j+1])
swap(a[j], a[j+1]);
}
}
}
void BubbleSort_2(int a[], int n)
{
int low = 0;
int high = n-1;
int j;
while(low < high)
{
for(j = low; j < high; j++)
{
if(a[j] > a[j+1])
swap(a[j], a[j+1]);
}
high--;
for(j = high; j > low; j--)
{
if(a[j] < a[j-1])
swap(a[j], a[j-1]);
}
low++;
}
}
void BubbleSort_3(int a[], int n)
{
int i = n-1; // 初始時的最後交換位置
while(i > 0) // 直到交換位置為0
{
int pos = 0;
for(int j = 0; j < i; j++) // 每趟排序只進行到上次最後交換的位置
{
if(a[j] > a[j+1])
{
pos = j;
swap(a[j], a[j+1]);
}
}
i = pos;
}
}
int main()
{
int a[] = {1, 4, 8, 6, 2, 7};
BubbleSort_3(a, 6);
for(int i = 0; i< 6; i++)
cout<<a[i]<<' ';
cout<<endl;
return 0;
}
相關文章
- 【資料結構】氣泡排序資料結構排序
- 資料結構與演算法——排序演算法-氣泡排序資料結構演算法排序
- python演算法與資料結構-氣泡排序(32)Python演算法資料結構排序
- 排序演算法–氣泡排序排序演算法
- 排序演算法__氣泡排序排序演算法
- 排序演算法--氣泡排序排序演算法
- 排序演算法-氣泡排序排序演算法
- 排序演算法——氣泡排序排序演算法
- 複習資料結構:排序演算法(六)——堆排序資料結構排序演算法
- 複習資料結構:排序演算法(七)——桶排序資料結構排序演算法
- 複習資料結構:排序演算法(八)——基排序資料結構排序演算法
- 重學資料結構和演算法(四)之氣泡排序、插入排序、選擇排序資料結構演算法排序
- Java 資料結構與演算法系列之氣泡排序Java資料結構演算法排序
- 資料結構&演算法實踐—氣泡排序及改進資料結構演算法排序
- 複習資料結構:排序演算法(四)——歸併排序資料結構排序演算法
- 排序——氣泡排序排序
- 演算法與資料結構系列 ( 六 ) - 氣泡排序法- Bubble Sort演算法資料結構排序
- 氣泡排序演算法排序演算法
- 演算法:氣泡排序演算法排序
- Java排序演算法之氣泡排序Java排序演算法
- 【演算法-排序之一】氣泡排序演算法排序
- 排序演算法-氣泡排序(Bubble Sort)排序演算法
- 排序演算法 - 氣泡排序和選擇排序排序演算法
- 排序:氣泡排序&快速排序排序
- 【資料結構與演算法】內部排序之二:氣泡排序和選擇排序(改進優化,附完整原始碼)資料結構演算法排序優化原始碼
- 複習資料結構:排序(一)——插入排序資料結構排序
- 複習資料結構:排序(三)——選擇排序資料結構排序
- 資料結構java版之氣泡排序及優化資料結構Java排序優化
- 資料結構之--氣泡排序的三種實現資料結構排序
- 排序之氣泡排序排序
- 【一起學習排序演算法】2 氣泡排序排序演算法
- 9. 氣泡排序,以及如何優化氣泡排序,氣泡排序屬於插入排序排序優化
- #排序演算法#【1】概述、氣泡排序、選擇排序排序演算法
- 氣泡排序排序
- 排序:交換排序——氣泡排序法排序
- 排序演算法(氣泡排序,選擇排序,插入排序,希爾排序)排序演算法
- 資料結構系列:圖文詳解氣泡排序 & 優化資料結構排序優化
- 看圖輕鬆理解資料結構與演算法系列(氣泡排序)資料結構演算法排序