原理是臨近的數(shù)字兩兩進(jìn)行比較,按照從小到大或者從大到小的順序進(jìn)行交換,
這樣一趟過去后,最大或最小的數(shù)字被交換到了最后一位,
然后再從頭開始進(jìn)行兩兩比較交換,直到倒數(shù)第二位時(shí)結(jié)束,其余類似看例子
例子為從小到大排序,
原始待排序數(shù)組| 6 | 2 | 4 | 1 | 5 | 9 |
第一趟排序(外循環(huán))
第一次兩兩比較6 > 2交換(內(nèi)循環(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))無交換
代碼僅供參考:
static void bubble_sort(int[] unsorted)
{
for (int i = 0; i < unsorted.Length; i++)
{
for (int j = i; j < unsorted.Length; j++)
{
if (unsorted[i] > unsorted[j])
{
int temp = unsorted[i];
unsorted[i] = unsorted[j];
unsorted[j] = temp;
}
}
}
}
static void Main(string[] args)
{
int[] x = { 6, 2, 4, 1, 5, 9 };
bubble_sort(x);
foreach (var item in x)
{
Console.WriteLine(item);
}
Console.ReadLine();
}
x