冒泡排序大家都知道,最基础的排序方法,直接上代码:
public class test10 {
public static void main(String[] args) {
int[] a = {1,3,2,4,9,8};
sort1(a);
System.out.println(Arrays.toString(a));
}
public static int[] sort1(int[] arry) {
int temp = 0;
for (int i = 0; i < arry.length-1; i++) {//控制外层循环
for (int j = 0; j < arry.length-1-i; j++) {//控制内层比较
if(arry[j] > arry[j+1]) {
temp = arry[j];
arry[j] = arry[j+1];
arry[j+1] = temp;
}
}
}
return arry;
}
}
然后有一个问题就是,如果数组是有序的,怎样才能优化冒泡排序呢,使这个冒泡排序不用来一个一个的遍历比较,直接上代码:
public class test10 {
public static void main(String[] args) {
int[] a = {1,2,3,4,5,8};
sort1(a);
System.out.println(Arrays.toString(a));
}
public static int[] sort1(int[] arry) {
int temp = 0;
boolean flag = false;
for (int i = 0; i < arry.length-1; i++) {//控制外层循环
for (int j = 0; j < arry.length-1-i; j++) {//控制内层比较
if(arry[j] > arry[j+1]) {
temp = arry[j];
arry[j] = arry[j+1];
arry[j+1] = temp;
flag =true;
}
}
if(flag == false) {
break;
}
}
return arry;
}
}
定义flag就可以解决数组有序的问题,首先定义flag 为 false,在内层循环交换中,如果成功交换了,就使flag为true,在外层循环加一个判断,如果flag 为false,就跳出整个循环,因为,如果flag为flase的话,就说明数组里的元素一次都没有交换过位置,也就是说数组是有序的,直接跳出整个外层循环,这样也大大增加了冒泡排序的运行速度。