冒泡排序的基本思路:通过对待排序系列从前向后,依次比较相邻元素的值,若发现逆序就交换,意思就是使较大的元素从前向后移,好比水低下的气泡一样逐渐向上冒泡,一个道理的。
冒泡排序优缺点:
优点:比较简单、空间复杂度较低、是稳定的一种排序。缺点:时间复杂度太高、效率比较慢、一轮比较都需要换位置,所以效率不高,假如现在一个数组里面有N个数,那么排序完成需要比较N*(N-1)/2次。
冒泡排序规则
每一趟排序的次数在逐渐减少的总的进行数组的大小减1次大的循环每一趟比较完都会有最大值出现。
实现代码如下
package com.ypj;
import java.text.SimpleDateFormat;
import java.util.Arrays;
import java.util.Date;
/**
* @description 测试类2
* @author: DimitriCode
* @date: 2020/4/7 0007 18:18 星期二
*/
public class Demo02 {
public static void main(String[] args) {
int[] arr = {9,6,3,15,-1};
demo02(arr);
System.out.println(Arrays.toString(arr));
}
public static void demo02(int[] arr){
int len = arr.length;
boolean flag = false;//标识变量,表示是否进行交换
for (int j=0;j<len-1;j++){//确定排序循环次数
int lent = arr.length;
for (int i=0;i<lent-1-j;i++){//确定比较次数
if (arr[i]>arr[i+1]){//如果前面的数比后面大,则交换
flag = true;
//交换
int tmp = arr[i];//先把arr[i]存在tmp中
arr[i] = arr[i+1];
arr[i+1] = tmp;
}
}
if (!flag){//在一趟排序中,一次交换没有发生过
break;
}else {
flag = false;//重置flag,进行下一次判断
}
}
}
}