数据结构与算法之排序算法

109 阅读1分钟

冒泡排序算法

基本介绍:通过对待排序序列从前向后(从下标较小的元素开始),依次比较相邻元素的值,若发现逆序则交换,使值较大的元素从前移向后部,就像水底的气泡一样逐渐向上冒。

因为在排序的过程中,各个元素都在不断的接近自己的位置,如果一趟比较下来没有进行过交换,那么就说明序列有序,因此要在排序过程中设置一个标志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:如果两个元素相等,就不会再交换位置,所以说冒泡排序是一种稳定的排序算法

优化:如果我们发现在某趟排序中,没有发生过一次交换,可以提前结束冒泡排序。这就是优化,聪明的你是否已经想到这里了呢。