冒泡排序原理
原理
* 比较相邻的两个元素,如果第一个元素比第二个元素大,那就交换一下位置,
* 每一对相邻的元素都要作比较,到最后最大的元素就到最后面了
*
*
* 元素有n个,那比较的趟数就是n-1趟,
* 每一趟都是相邻元素比较,一直到最后,最大的到最后一个,相邻比较的次数,没有都减一次
例如有一组数据{9,6,8,2,7}
规律 比较趟数=元素数减一
第一趟比价次数等于元素个数减一每趟比较次数比上一次减一
开始冒泡排序
第一趟比较
9,6,8,2,7
9和6比较 9比6大 9和6交换位置 6,9,8,2,7
然后9和8比较 9比8大 9和8 交换位置 6,8,9,2,7
然后9和2比较 9比2大 9和2交换位置 6,8,2,9,7
然后9和7比较 9比7大 9和7交换位置 6,8,2,7,9
第一趟比较结束 比较了4次 一共五个元素参加
第二趟比较
6,8,2,7,9
6和8比较 8比6大 不交换位置 6,8,2,7,9
然后8和2比较 8比2大 8和2交换位置 6,2,8,7,9
然后8和7比较 8比7大 8和7交换位置 6,2,7,8,9
第二趟比较 比较了3次 出来最大的9没有参加 其他4个都参加了
第三趟比较
6,2,7,8,9
6和2比较 6比2大 交换位置 2,6,7,8,9
然后6和7比较 6小于7 不交换位置 2,6,7,8,9
第三趟比较 比较2次 出去最后的8 9 没参加 三个数参加
第四趟比较
2,6,7,8,9
2和6比较 2小于6不交换位置 2,6,7,8,9
第四趟比较 比较一次
public class Demo3 {
public static void main(String[] args) {
int[] array = {3,5,2,1};
for (int i = 0; i < array.length - 1; i++) {//外层的for循环控制比较的趟数
for (int j = 0; j < array.length - i - 1; j++) {//内存for循环控制相邻元素比较次数
/*分析冒泡排序
进入外层for循环
i = 0, 0 < 3 ,true
进入内层for循环
j = 0, 0 < 3, if语句 array[0]>array[1] false j++
j = 1, 1 < 3, if语句 array[1]>array[2] true 交换位置{3,2,5,1} j++
j = 2, 2 < 3, if语句 array[2]>array[3] true 交换位置{3,2,1,5} j++
j = 3 ,3< 3 false 内层for循环结束 i++
i = 1, 1 < 3,true
进入内层for循环
j = 0, 0 < 2, if语句 array[0]>array[1] true 交换位置{2,3,1,5} j++
j= 1, 1< 2, if语句 array[1]> array[2] true 交换位置 {2,1,3,5} j++
j = 2 , 2< 2, false 内层for 循环结束 i++
i = 2 , 2 < 3, true
进入内层for循环
j = 0, 0 < 1, if语句 array[0] > array[1] true 交换外置{1,2,3,5} j++
j= 1, 1< 1, false 内层for 循环结束 i++
i = 3 , 3 < 3,false 外层for 循环结束
然后打印输出
*/
if (array[j] > array[j + 1]){
int a = 0;
a = array[j];
array[j] = array[j + 1];
array[j + 1] = a;
}
}
}
System.out.println(Arrays.toString(array));
}
}