冒泡排序(重点)
- 冒泡排序无疑是最为出名的排序算法之一,总共有八大排序算法,后面都会详细讲解!
- 冒泡排序代码还是相当简单的,两层循环,外层为冒泡轮数,内层依次进行比较,编程江湖中人尽皆知。
- 我们看到嵌套循环,应该立马得出这个算法的时间复杂度为O(n2)。(关于时间复杂度我会在算法的文章里详细讲解)
- 思考:如何进行优化?
package com.array.www;
import java.util.Arrays;
//冒泡排序
public class ArrayDemo09 {
public static void main(String[] args) {
//1.比较数组中两个相邻的元素,如果第一个元素比第二个元素大,则交换位置
//2.每一次比较,都会产生一个最大或者最小的数字
//3.下一轮比较则可以少一次排序
//4.依次循环,直到结束!
int[] a = {4,9,0,18,5,7,8,1,2,3,6};
a = sortArray(a);
System.out.println(Arrays.toString(a));//[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 18]
}
public static int[] sortArray(int[] a) {
//临时变量
int temp = 0;
//外层循环,判断我们这个要走多少次(冒泡轮数)
for (int i = 0; i < a.length - 1; i++) {
//内层循环,比较判断两个相邻元素,如果第一个比第二个大,则交换位置
//通过flag标志位减少没有意义的比较(如果已经是排好序的,就没必要进行比较了,直接跳出结束循环)
boolean flag = false;
for (int j = 0; j < a.length - 1 - i; j++) {
if (a[j] > a[j + 1]) {
temp = a[j];
a[j] = a[j + 1];
a[j + 1] = temp;
flag = true;
}
}
if (flag == false) {
break;
}
}
return a;//这里再次强调,return一般用在外层方法中,返回一个结果给调用者
}
}