经典排序算法系列1-冒泡排序

Bubble Sort-冒泡排序

需求

对N个整数升序排序

思路

进行N轮排序,每一轮选出最大的元素,在每轮对比中,相邻元素比较,如果前面元素大于后面元素,则交换两个元素位置

需要比对的次数(N-1)+(N-2)+...+1 =N*(N-1)/2

算法评判

  • 时间复杂度

    O(N^2)

  • 空间复杂度

    O(1)

    只需要常量级的辅助空间,所以也叫原地排序

  • 稳定性

    如果不互换两个相等元素,则是稳定的

实现代码如下

public void sort(int[] arr) {
    for (int i = 0; i < arr.length; i++) {
        for (int j = 0; j < arr.length - 1 - i; j++) {
            if (arr[j] > arr[j + 1]) {
                swap(arr, j, j + 1);
            }
        }
    }
}

优化,当某一轮评选下来发现没有元素交换,说明已经有序了,可以提前结束排序。优化后代码如下

public void sort(int[] arr) {
    for (int i = 0; i < arr.length; i++) {
      boolean sorted=true;
        for (int j = 0; j < arr.length - 1 - i; j++) {
            if (arr[j] > arr[j + 1]) {
                swap(arr, j, j + 1);
                sorted=false;
            }
        }
      if(sorted){
        break;
      }
    }
}
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 冒泡排序是非常容易理解和实现,,以从小到大排序举例:设数组长度为N。1.比较相邻的前后二个数据,如果前面数据大于后...
    爱情小傻蛋阅读 725评论 0 4
  • 上面的同学请保持秩序。。。本章,来研究一下排序算法。排序算法在大部分情况下并不具备直接商业应用的条件,但是对我们理...
    CrazyShawnLiu阅读 697评论 0 1
  • 概述 排序有内部排序和外部排序,内部排序是数据记录在内存中进行排序,而外部排序是因排序的数据很大,一次不能容纳全部...
    蚁前阅读 5,248评论 0 52
  • 简单来说,时间复杂度指的是语句执行次数,空间复杂度指的是算法所占的存储空间 时间复杂度计算时间复杂度的方法: 用常...
    Teci阅读 1,141评论 0 1
  • 韩剧《坏男人》讲述的是一个被财阀家(海神集团)弃养的男孩崔泰成(洪泰成)二十年后化身为沈建旭复仇的故事。 人的一念...
    宵樱阅读 2,460评论 0 0