一、 基本原理:
- 比较两两相邻的关键字,如果反序则交换;
- 重复此过程,直到没有反序为止
- 假设一个数组按照升序排列,经过第一轮比较之后,最大的数就被放到最后,位置固定,不再参与比较
- 第二轮比较时,第二大数字被放在倒数第二的位置
- 需要两层循环:外层控制比较的轮数,和数组元素的个数有关;内层控制需要参与比较的元素个数,和外层循环的轮数有关
二、实例:
给定数组:
{38,65,97,76,13,27,49}
第一趟排序后:38,65,76,13,27,49,【97】
第二趟排序后:38,65,13,27,49,【76,49】
第三趟排序后:38,13,27,49,【65,76,97】
第四趟排序后:13,27,38,【49,65,76,97】
第五趟排序后:13,27,【38,49,65,76,97】
第六趟排序后:13,【27,38,49,65,76,97】
第七趟排序后:【13,27,38,49,65,76,97】
最后排序结果:
三、代码实现:
public static void BubbleSort(int[] arr){
for (int i = 0; i < arr.length; i++) {
boolean flag = false;
for (int j = 0; j <arr.length-i-1 ; j++) {
if (arr[j]>arr[j+1]){
int temp = arr[j];
arr[j] = arr[j+1];
arr[j+1] =temp;
flag=true;
}
}
if (!flag)
break;
}
}