冒泡排序
代码
package com.zhan.base04Array;
public class Test08 {
public static void main(String[] args) {
int[] a={1,5,3,8,6};
sort(a);
}
/* 冒泡排序
1.比较数组中相邻的两个因素的大小,如果不相等(看情况),则交换顺序
2.每一次比较,都会产生 最大或者最小 的一个数字 (内循环)
3.下一轮循环可以少一次排序
4. 依次循环,直到结束
*/
public static void sort(int[] a){
boolean flag=false; // 算法的优化
for (int i = 0,k=a.length-1; i < a.length-1; i++,k--) {
// 外循环决定每一次内循环后选出最大或者最小值的轮数 执行 a.length-1 次,下一次循环可少一次排序
for (int j = 0; j <k ; j++) { //内循环决定排序 每一次外循环后,内循环都会减少一次排序
if (a[j]>a[j+1]){ // 升序
int temp;
temp=a[j];
a[j]=a[j+1];
a[j+1]=temp;
flag=true;
// 如果if语句没有被执行,那么flag==false,则说明原本的顺序就已经排好了,就可以跳出循环,节省资源
}
}
if (flag==false) break;
}
/* 狂神讲的 ,都一样,使得内循环每次排序的次数减1即可
for (int i = 0; i < a.length-1; i++) {
for (int j = 0; j < a.length-1-i; j++) {
}
}
*/
for (int i = 0; i < a.length; i++) {
System.out.print(a[i]+" ");
}
System.out.println();
}
}
标签:int,08,length,冒泡排序,++,flag,循环
From: https://www.cnblogs.com/zhanjianhai/p/17069120.html