排序算法-冒泡排序BubbleSort

冒泡排序算法的原理如下:

  1. 比较相邻的元素。如果第一个比第二个大,就交换他们两个。
  2. 对每一对相邻元素做同样的工作,从开始第一对到结尾的最后一对。在这一点,最后的元素应该会是最大的数。
  3. 针对所有的元素重复以上的步骤,除了最后一个。
  4. 持续每次对越来越少的元素重复上面的步骤,直到没有任何一对数字需要比较。

总结:从左至右,依次比较,逆序交换

f2e0a8567cd6c5770a489bf0052db85c.gif

时间复杂度:

最好情况:序列初始状态是正序的,扫描一趟可完成排序 故 最好时间复杂度 O (n)

最坏情况:序列初始状态是逆序的,需要进行n-1趟排序,每趟排序需要进行n-i次比较,故 最坏时间复杂度 O (n^2)

冒泡排序总的平均时间复杂度为O (n^2)

冒泡排序是稳定排序

稳定排序:排序中相等的关键字,排序后序列号不变,称为稳定排序 比如int数组[1,1,1,6,4]中a[0],a[1],a[2]的值相等,在排序时不改变其序列,则称所用的方法是稳定的。)

伪代码:


```int[] arr={};  //给入一个数组
for(i=0;i<arr.length-1;i++)  //第几轮排序
	for(j=0;arr.length-1-i;j++) //第几个数据
		if(a[j]<a[j+1] 或者 a[j]>a[j+1])
		a[j]、a[j+1]交换

程序:

package Sort;

import java.util.Arrays;

public class BubbleSort1 {
    public static void main(String[] args) {
        int[] arr= {2,-1,4,3,10,2,-6,11};
        System.out.println(Arrays.toString(arr));
        bubbleSort(arr);
        System.out.println(Arrays.toString(arr));
    }

    public static void bubbleSort(int[] arr){
        int temp;
        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;
                }
            }
        }
    }
}

优化程序:

假如从开始的第一对到结尾的最后一对,相邻的元素没有发生交换,意味着排序完成,可以退出。

package Sort;

import java.util.Arrays;

public class BubbleSort1 {
    public static void main(String[] args) {
        int[] arr= {2,-1,4,3,10,2,-6,11};
        System.out.println(Arrays.toString(arr));
        bubbleSort(arr);
        System.out.println(Arrays.toString(arr));
    }

    public static void bubbleSort(int[] arr){
        int temp;
        boolean flag = false;
        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] ){
                    flag = true;
                    temp = arr[j];
                    arr[j] = arr[j+1];
                    arr[j+1] = temp;
                }
            }
            if(!flag){
                break;
            }else{
                flag = false;
            }
        }
    }
}
posted @ 2021-04-02 16:00  爱学习的小杨同学  阅读(160)  评论(0)    收藏  举报