資料結構之--氣泡排序的三種實現
氣泡排序是非常容易理解和實現,,以從小到大排序舉例:
設陣列長度為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;
}
}
}
氣泡排序畢竟是一種效率低下的排序方法,在資料規模很小時,可以採用。資料規模比較大時,最好用其它排序方法。
相關文章
- 【資料結構】氣泡排序資料結構排序
- 資料結構java版之氣泡排序及優化資料結構Java排序優化
- Java 資料結構與演算法系列之氣泡排序Java資料結構演算法排序
- 複習資料結構:排序演算法(二)——氣泡排序資料結構排序演算法
- 資料結構&演算法實踐—氣泡排序及改進資料結構演算法排序
- Java實現氣泡排序Java排序
- 氣泡排序java實現排序Java
- 排序之氣泡排序排序
- <qsort實現一個通用的氣泡排序,排序各種型別的資料詳解>排序型別
- 資料結構與演算法——排序演算法-氣泡排序資料結構演算法排序
- 重學資料結構和演算法(四)之氣泡排序、插入排序、選擇排序資料結構演算法排序
- 基本排序之氣泡排序排序
- Python實現氣泡排序Python排序
- Golang實現氣泡排序法Golang排序
- Go實現氣泡排序和快速排序Go排序
- python演算法與資料結構-氣泡排序(32)Python演算法資料結構排序
- 資料結構系列:圖文詳解氣泡排序 & 優化資料結構排序優化
- go 實現氣泡排序和插入排序Go排序
- OJ題之氣泡排序排序
- 用go實現簡單的氣泡排序Go排序
- 奇偶氣泡排序在CUDA上的實現排序
- php實現 氣泡排序,插入排序,選擇排序PHP排序
- 演算法與資料結構系列 ( 六 ) - 氣泡排序法- Bubble Sort演算法資料結構排序
- 用JS實現氣泡排序和插入排序JS排序
- 排序——氣泡排序排序
- java氣泡排序演算法實現Java排序演算法
- 【資料結構】 各種排序演算法的實現資料結構排序演算法
- PHP 中的氣泡排序總結PHP排序
- JS氣泡排序的6種寫法JS排序
- ForkJoin和氣泡排序組合實現的歸併排序排序
- 白話經典演算法系列之一 氣泡排序的三種實現 【轉】演算法排序
- 氣泡排序排序
- 9. 氣泡排序,以及如何優化氣泡排序,氣泡排序屬於插入排序排序優化
- 白話經典演算法系列之中的一個 氣泡排序的三種實現演算法排序
- Java排序演算法之氣泡排序Java排序演算法
- 排序:氣泡排序&快速排序排序
- 看圖輕鬆理解資料結構與演算法系列(氣泡排序)資料結構演算法排序
- Java實現氣泡排序和插入排序演算法Java排序演算法