冒泡排序算法
基本介绍:通过对待排序序列从前向后(从下标较小的元素开始),依次比较相邻元素的值,若发现逆序则交换,使值较大的元素从前移向后部,就像水底的气泡一样逐渐向上冒。
因为在排序的过程中,各个元素都在不断的接近自己的位置,如果一趟比较下来没有进行过交换,那么就说明序列有序,因此要在排序过程中设置一个标志flag,判断元素是否进行过交换,从而减少不必要的比较。
下面是具体的代码:
```public class BubbleSort {
public static void main(String[] args) {
int arr[]={3,9,-1,10,-2};
//为了容易理解我们把冒泡排序的演变过程,给大家展示
//冒泡排序的时间复杂度 o(n^2)
int temp =0;//临时变量
for (int i=0;i<arr.length-1;i++){
for (int j=0;j<arr.length-1-i;j++){
//开始比较,如果相邻两个元素,后一个比前一个大就交换它们
if (arr[j]>arr[j+1]){
temp =arr[j];
arr[j]=arr[j+1];
arr[j+1]=temp;
}
}
System.out.println("第"+(i+1)+"趟排列之后的数组");
System.out.println(Arrays.toString(arr));
}
}
}
总结
我们比较相邻的两个元素,如果第一个比第二个大,就交换它们连个,对每一对相邻的元素做同样的工作,从开始的一对到结尾的最后一对,那么这样在最后的元素应该是最大的数,针对所有的元素重复以上的步骤,除了最后一个。
tips:如果两个元素相等,就不会再交换位置,所以说冒泡排序是一种稳定的排序算法
优化:如果我们发现在某趟排序中,没有发生过一次交换,可以提前结束冒泡排序。这就是优化,聪明的你是否已经想到这里了呢。