臨近的數(shù)字兩兩進行比較,按照從小到大或者從大到小的順序進行交換,
這樣一趟過去后,最大或最小的數(shù)字被交換到了最后一位,
然后再從頭開始進行兩兩比較交換,直到倒數(shù)第二位時結束,其余類似看例子
例子為從小到大排序,
原始待排序數(shù)組| 6 | 2 | 4 | 1 | 5 | 9 |
第一趟排序(外循環(huán))
第一次兩兩比較6 > 2交換(內循環(huán))
交換前狀態(tài)| 6 | 2 |?4 | 1 | 5 | 9 |
交換后狀態(tài)| 2 | 6 |?4 | 1 | 5 | 9 |
?
第二次兩兩比較,6 > 4交換
交換前狀態(tài)| 2?| 6 | 4 |?1 | 5 | 9 |
交換后狀態(tài)| 2?| 4 | 6 |?1 | 5 | 9 |
?
第三次兩兩比較,6 > 1交換
交換前狀態(tài)| 2 | 4?| 6 | 1 |?5 | 9 |
交換后狀態(tài)| 2 | 4?| 1 | 6 |?5 | 9 |
?
第四次兩兩比較,6 > 5交換
交換前狀態(tài)| 2 | 4 | 1?| 6 | 5 |?9 |
交換后狀態(tài)| 2 | 4 | 1?| 5 | 6 |?9 |
?
第五次兩兩比較,6 < 9不交換
交換前狀態(tài)| 2 | 4 | 1 | 5?| 6 | 9 |
交換后狀態(tài)| 2 | 4 | 1 | 5?| 6 | 9 |
?
第二趟排序(外循環(huán))
第一次兩兩比較2 < 4不交換
交換前狀態(tài)| 2 | 4 |?1 | 5 | 6 | 9 |
交換后狀態(tài)| 2 | 4 |?1 | 5 | 6 | 9 |
?
第二次兩兩比較,4 > 1交換
交換前狀態(tài)| 2?| 4 | 1 |?5 | 6 | 9 |?
交換后狀態(tài)| 2?| 1 | 4 |?5 | 6 | 9 |
?
第三次兩兩比較,4 < 5不交換
交換前狀態(tài)| 2 | 1?| 4 | 5 |?6 | 9 |?
交換后狀態(tài)| 2 | 1?| 4 | 5 |?6 | 9 |
?
第四次兩兩比較,5 < 6不交換
交換前狀態(tài)| 2 | 1 | 4?| 5 | 6 |?9 |
交換后狀態(tài)| 2 | 1 | 4?| 5 | 6 |?9 |
?
第三趟排序(外循環(huán))
第一次兩兩比較2 > 1交換
交換后狀態(tài)| 2 | 1 |?4 | 5 | 6 | 9 |
交換后狀態(tài)| 1 | 2 |?4 | 5 | 6 | 9 |
?
第二次兩兩比較,2 < 4不交換
交換后狀態(tài)| 1?| 2 | 4 |?5 | 6 | 9 |?
交換后狀態(tài)| 1?| 2 | 4 |?5 | 6 | 9 |
?
第三次兩兩比較,4 < 5不交換
交換后狀態(tài)| 1 | 2?| 4 | 5 |?6 | 9 |?
交換后狀態(tài)| 1 | 2?| 4 | 5 |?6 | 9 |
?
第四趟排序(外循環(huán))無交換
第五趟排序(外循環(huán))無交換
排序完畢,輸出最終結果1 2 4 5 6 9
分析過了之后,直接上代碼了:
#include
void BubbleSort(int arr[], int length)
{
int temp;
for (int i = 0; i < length; ++i)
{
for (int j = 0; j < length - i - 1; ++j)
{
if (arr[j] > arr[j + 1])
{
temp = arr[j];
arr[j] = arr[j + 1];
arr[j + 1] = temp;
}
}
}
}
int main()
{
int arr[6] = {6,2,4,1,5,9};
BubbleSort(arr, sizeof(arr) / sizeof(arr[0]));
for (int i = 0; i < sizeof(arr) / sizeof(arr[0]); ++i)
{
std::cout<