大家好,我是架构君,一个会写代码吟诗的架构师。今天说一说JAVA冒泡排序算法(含详细过程代码讲解及优化)「建议收藏」,希望能够帮助大家进步!!!
以3,9,-1,10,-2这组数为例,对这组数使用冒牌排序使其有序
首先创建一个数组和一个用于三角交换的变量
int arr[] = {
3,9,-1,10,-2};
int temp = 0;
首先进行第一趟
此代码由Java架构师必看网-架构君整理
//第一趟排序,就是将最大的数排在最后
for (int j = 0; j < arr.length - 1; j++) {
if (arr[j] > arr[j+1]){
temp = arr[j];
arr[j] = arr[j+1];
arr[j+1] = temp;
}
}
第一趟的运行后的数组
然后第二趟
//第一趟排序,就是将最大的数排在最后
for (int j = 0; j < arr.length - 1-1; j++) {
if (arr[j] > arr[j+1]){
temp = arr[j];
arr[j] = arr[j+1];
arr[j+1] = temp;
}
}
第二趟的运行后的数组
第三趟
此代码由Java架构师必看网-架构君整理
//第一趟排序,就是将最大的数排在最后
for (int j = 0; j < arr.length - 1 -2; j++) {
if (arr[j] > arr[j+1]){
temp = arr[j];
arr[j] = arr[j+1];
arr[j+1] = temp;
}
}
第三趟的运行后的数组
第四趟
//第一趟排序,就是将最大的数排在最后
for (int j = 0; j < arr.length - 1 -3; j++) {
if (arr[j] > arr[j+1]){
temp = arr[j];
arr[j] = arr[j+1];
arr[j+1] = temp;
}
}
第四趟的运行后的数组
下面是四趟代码的结果汇总:
下面为冒泡排序的代码,并把它写入bubblesSort方法里:
普通冒泡排序:
public static void bubbleSort(int[] arr){
//冒泡排序的时间复杂度为O(n*n)
int temp = 0;//临时变量
for (int j = 0; j < arr.length - 1; j++) {
for (int i = 0; i < arr.length-1 -j ; i++) {
if (arr[i] > arr[i+1]){
//三角交换
temp = arr[i];
arr[i] = arr[i+1];
arr[i+1] = temp;
}
}
}
}
优化冒泡排序:
public static void bubbleSort(int[] arr){
//冒泡排序的时间复杂度为O(n*n)
int temp = 0;//临时变量
boolean flag = false;//用于优化冒泡排序,判断是否进行过交换
for (int j = 0; j < arr.length - 1; j++) {
for (int i = 0; i < arr.length-1 -j ; i++) {
if (arr[i] > arr[i+1]){
//三角交换
temp = arr[i];
arr[i] = arr[i+1];
arr[i+1] = temp;
flag = true;
}
}
//如果没有进入三角交换则证明数组已经有序,直接退出循环即可
//如果进入了三角交换,把flag赋值为false,来判断下一次循环是否进入三角交换
if (flag == false){
break;
}else {
flag = false;
}
}
}