冒泡排序的理解
就是从头到尾比较相邻的两个元素,如果有逆序,那么就调换位置,一直到结束
再来一遍比较相邻元素,逆序就换位置,知道再来一遍的时候没有逆序存在,那么就证明排序结束。
(逆序:就是大的在前小的在后 eg: 1,2,5,0这里5,0就是逆序)
下面借用图来理解一下
这里第一次排序:
5>2 :2与5调换位置
5>1:5与1调换位置
9>8:9与8调换位置
9>3:9与3调换位置
9>0:9与0调换位置
就成如上图的顺序
然后进行第二次的排序(变成如下顺序):
然后第三次排序:
接着:
感受其中规律:就像是大的一步步往后调,小的一步步往前调
代码:可以用两次循环
这里的flag用来避免不必要的循环,若这次循环没有发生交换,那么就证明顺序已经排好,就没必要继续再循环
public static void Mppx(int[] arr){
int flag=1;
for(int i=0;i<=arr.length-1&flag==1;i++) {
flag=0;
for(int m=0;m<arr.length-i;m++){
//m<arr.length-i是尾边界 每一次循环之后大的数都会到后面正确的位置,那么下一次就不用再去比较它了
if(arr[m]>arr[m+1]){
int x=arr[m];
arr[m]=arr[m+1];
arr[m+1]=x;
flag=1;
}
}
}
for (int i:arr) {
System.out.print(i+" ");
}
}