大家好,欢迎来到IT知识分享网。
冒泡排序算法拆分讲解及优化
java冒泡排序
以3,9,-1,10,-2这组数为例,对这组数使用冒牌排序使其有序
一、代码的拆分讲解
首先创建一个数组和一个用于三角交换的变量
int arr[] = {
3,9,-1,10,-2};
int temp = 0;
首先进行第一趟
//第一趟排序,就是将最大的数排在最后
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;
}
}
第二趟的运行后的数组
第三趟
//第一趟排序,就是将最大的数排在最后
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;
}
}
第四趟的运行后的数组
下面是四趟代码的结果汇总:
从上面步骤,可以观察到每次的j都相对于前一趟进行-1操作,所以可以把这些操作套在一个for循环里来控制j即可。
二、冒泡排序的代码
下面为冒泡排序的代码,并把它写入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;
}
}
}
免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://yundeesoft.com/25477.html