设数组的长度为N: (1)比较前后相邻的二个数据,如果前面数据大于后面的数据,就将这二个数据交换。
(2)这样对数组的第0个数据到N-1个数据进行一次遍历后,最大的一个数据就“沉”到数组第N-1个位置。
(3)N=N-1,如果N不为0就重复前面二步,否则排序完成。
package day;
import java.util.Arrays;
public class test {
public static void main(String[] args) {
int[] sortNum = {12,33,28,86,15,62,9,38}; //定义数组
bubbleSort3(sortNum); //开始排序
System.out.println(Arrays.toString(sortNum)); //打印结果
}
/**
* 写法一:从小到大顺序进行排列
*
* @param sortNum
*/
private static void bubbleSort(int[] sortNum){
int temp = 0;
for (int i = 0; i < sortNum.length-1; i++) { //第一个for循环控制排序要走多少趟,最多做n-1趟排序
for (int j = 0; j < sortNum.length-1-i; j++) { //第2个for循环控制每趟比较多少次
if(sortNum[j+1]<sortNum[j]){ //大的往后面排
temp = sortNum[j];
sortNum[j] = sortNum[j+1];
sortNum[j+1] = temp;
}
}
}
}
/**
* 写法二:从小到大顺序进行排列
*
* @param sortNum
*/
private static void bubbleSort2(int[] sortNum){
int temp = 0;
for (int i = 0; i < sortNum.length-1; i++) { //第一个for循环控制排序要走多少趟,最多做n-1趟排序
for (int j = sortNum.length-1; j > i; j--) { //第2个for循环控制每趟比较多少次
if(sortNum[j-1]>sortNum[j]){ //大的往后面排
temp = sortNum[j-1];
sortNum[j-1] = sortNum[j];
sortNum[j] = temp;
}
}
}
}
/**
* 写法三:从小到大顺序进行排列
*
* @param sortNum
*/
private static void bubbleSort3(int[] sortNum){
boolean flag = true;
while(flag){
flag = false;
int temp = 0;
for (int i = 0; i < sortNum.length-1; i++) { //第一个for循环控制排序要走多少趟,最多做n-1趟排序
for (int j = 0; j < sortNum.length-1-i; j++) { //第2个for循环控制每趟比较多少次
if(sortNum[j+1]<sortNum[j]){ //大的往后面排
temp = sortNum[j];
sortNum[j] = sortNum[j+1];
sortNum[j+1] = temp;
flag = true;
}
}
//优化判断
if(!flag){// 若没有交换则排序完成,直接跳出
break;
}
}
}
}
}