冒泡排序

冒泡排序

原理

  • 比较相邻元素,大就交换
  • 从第一对开始,到最后一对,一次排序后保证最大的位于末尾
  • 重复n次(n为)

复杂度

  • 时间复杂度:O(n^2)
  • 空间复杂度:O(1)
  • 稳定排序
  • 原地排序

使用环境

数组基本有序,或者一个有序的大数组中添加一些小数据。

代码实现

public void bubble(int[] arr) {
    for(int i = 0;i < arr.length - 1;i++){
        for(int j = 0;j < arr.length - i - 1;j++){
            if(arr[j + 1] < arr[j]){
                arr[j] = arr[j] ^ arr[j + 1];
        		arr[j + 1] = arr[j] ^ arr[j + 1];
                arr[j] = arr[j] ^ arr[j + 1];
            }
        }
    }
}

改良想法

在我们遍历的过程中,会发现从开始第一队到最后一对都没有发生交换,此时意味着,剩下这些待排序的元素已经是有序的数据,无序再次排序,所以我们可以引入一个标志,当遇到此情况的时候,直接跳出循环。减少无意义的比较和缩短排序时间。

posted @ 2021-03-25 13:21  先破防再敲  阅读(65)  评论(0)    收藏  举报