氣泡排序法
步驟 : ( 由小到大 )
- 比較相鄰的 2 的數字, 如果前面的數字大於後面的數字就做 swap
- 重複 步驟1 直到 array 結束, 最後的數字就為最大值
- 重複 步驟1 和 步驟2, 每次比較的 array ending 為上一輪的最大值
- 重複 3 直到結束
範例 : array --> 1, 9, 4, 8, 6, 3, 10, 21, 0
執行順序 :
1 4 9 8 6 3 10 21 0
1 4 8 9 6 3 10 21 0
1 4 8 6 9 3 10 21 0
1 4 8 6 3 9 10 21 0
1 4 8 6 3 9 10 0 21
1 4 6 8 3 9 10 0 21
1 4 6 3 8 9 10 0 21
1 4 6 3 8 9 0 10 21
1 4 3 6 8 9 0 10 21
1 4 3 6 8 0 9 10 21
1 3 4 6 8 0 9 10 21
1 3 4 6 0 8 9 10 21
1 3 4 0 6 8 9 10 21
1 3 0 4 6 8 9 10 21
1 0 3 4 6 8 9 10 21
0 1 3 4 6 8 9 10 21
0 1 3 4 6 8 9 10 21
Code 如下 (c++):
#include <iostream>
// 沒有 flag 版本
void bubbleSortWithoutFlag(int *array, size_t &arrayLen);
void printArray(int *array, size_t &arrayLen);
int main(int argc, const char * argv[]) {
// insert code here...
int array[] = {1,9,4,8,6,3,10,21,0};
size_t arrayLen = sizeof(array) / sizeof(int);
bubbleSortWithoutFlag(array, arrayLen);
printArray(array, arrayLen);
return 0;
}
void bubbleSortWithoutFlag(int *array, size_t &arrayLen){
int tmp = 0;
for(size_t x=0 ; x < arrayLen; x++){
for(size_t y = 0; y < (arrayLen - x) ; y++){
if(*(array + y) > *(array + y + 1)){
// swap
tmp = *(array + y);
*(array + y) = *(array + y + 1);
*(array + y + 1) = tmp;
}
}
}
}
void printArray(int *array, size_t &arrayLen){
for(size_t x=0 ; x < arrayLen; x++){
std::cout << "index --> " << std::to_string(x) << " , value --> " << std::to_string(*(array + x)) << std::endl;
}
}