冒泡排序 有轻气泡上浮和较大值后移两种,只不过换汤不换药理解一种另一个也非常简单。 注意冒泡是针对 int类型的数组 其他类型的不适合
基本逻辑
两层循环 为什么不是一层 三层 四层呢?
因为冒泡 是比较两个相邻的元素 ,比较后较大值后移。所以一层只能保证 最大的值在最后并不能保证所有元素排序的正确性
例如 3 5 2 冒泡后 3 2 5 显然 3是要比2大的但是 3却在2的前面,所以一层循环不够。
而两层循环就可以了
变量i为0 时可以 找到最大值 i加一找到第二大的数值 循环结束前 找到最小值 正好可以完成冒泡排序
int [] arr = {1,2,3,10,5,9,6};
for(int i=0;i<arr.length-1;i++){
boolean iswap=false;
for(int k=0;k<arr.length-i-1;k++){
if(arr[k]>arr[k+1]){
int m=arr[k];
arr[k]=arr[k+1];
arr[k+1]=m;
iswap=true;
}
}
if(!iswap){
break;
}
System.out.println(Arrays.toString(arr));
}
原来的 {1,2,3,10,5,9,6}
输出的 [1, 2, 3, 5, 9, 6, 10]
[1, 2, 3, 5, 6, 9, 10]
从左向右比较 最大的先到最右
int [] arr = {1,2,3,10,5,9,6};
for(int i=0;i<arr.length-1;i++){
boolean iswap = false;
for(int k=arr.length-1;k>i;k--){
if(arr[k]<arr[k-1]){
int m =arr[k];
arr[k]=arr[k-1];
arr[k-1]=m;
iswap=true;
}
}
if(!iswap){
break;
}
System.out.println(Arrays.toString(arr));
}
原来的 {1,2,3,10,5,9,6}
输出的 [1, 2, 3, 5, 10, 6, 9]
[1, 2, 3, 5, 6, 10, 9]
[1, 2, 3, 5, 6, 9, 10]
从右向左 小的向左移位 最小的先到左