美文网首页
2018-07-21

2018-07-21

作者: Ping接未来 | 来源:发表于2018-07-21 11:20 被阅读0次

排序算法之冒泡排序

冒泡排序算法原理:比较两个相邻的元素,将值大的元素交换至右端。

步骤:依次比较相邻的两个数,将小数放在前面,大数放在后面。即在第一趟:首先比较第1个和第2个数,将小数放前,大数放后。然后比较第2个数和第3个数,将小数放前,大数放后,如此继续,直至比较最后两个数,将小数放前,大数放后。重复第一趟步骤,直至全部排序完成。

举例 :排序数组[6 3 8 2 9 1]

第一趟排序:

第一次排序:6和3比较,6大于3,交换位置: 3 6 8 2 9 1

第二次排序:6和8比较,6小于8,不交换位置:3 6 8 2 9 1

第三次排序:8和2比较,8大于2,交换位置: 3 6 2 8 9 1

第四次排序:8和9比较,8小于9,不交换位置:3 6 2 8 9 1

第五次排序:9和1比较:9大于1,交换位置: 3 6 2 8 1 9

第一趟总共进行了5次比较, 排序结果: 3 6 2 8 1 9


第二趟排序:

第一次排序:3和6比较,3小于6,不交换位置:3 6 2 8 1 9

第二次排序:6和2比较,6大于2,交换位置: 3 2 6 8 1 9

第三次排序:6和8比较,6大于8,不交换位置:3 2 6 8 1 9

第四次排序:8和1比较,8大于1,交换位置: 3 2 6 1 8 9

第二趟总共进行了4次比较, 排序结果: 3 2 6 1 8 9


第三趟排序:

第一次排序:3和2比较,3大于2,交换位置: 2 3 6 1 8 9

第二次排序:3和6比较,3小于6,不交换位置:2 3 6 1 8 9

第三次排序:6和1比较,6大于1,交换位置: 2 3 1 6 8 9

第二趟总共进行了3次比较, 排序结果: 2 3 1 6 8 9


第四趟排序:

第一次排序:2和3比较,2小于3,不交换位置:2 3 1 6 8 9

第二次排序:3和1比较,3大于1,交换位置: 2 1 3 6 8 9

第二趟总共进行了2次比较, 排序结果: 2 1 3 6 8 9


第五趟排序:

第一次排序:2和1比较,2大于1,交换位置: 1 2 3 6 8 9

第二趟总共进行了1次比较, 排序结果: 1 2 3 6 8 9


最终结果:1 2 3 6 8 9


代码实现

package sortdemo;

public class BubbleSort {
    public static void main(String[] args){
        int[] arr = {6,3,8,2,9,1};
        System.out.println("排序前数组为:");
        for(int k=0;k<arr.length;k++)
            System.out.print(arr[k]+" ");
        for(int i=0;i<arr.length-1;i++){ //外层循环控制趟数
            for(int j=0;j<arr.length-i-1;j++){ //内层循环控制每一趟运行多少次
                if(arr[j]>arr[j+1]){
                    int temp=arr[j];
                    arr[j]=arr[j+1];
                    arr[j+1]=temp;
                }
            }
        }
        System.out.println();
        System.out.println("排序后的数组为:");
        for(int m=0;m<arr.length;m++){
            System.out.print(arr[m]+" ");
        }

算法复杂度
1.如果我们的数据正序,只需要走一趟即可完成排序。所需的比较次数C和记录移动次数M均达到最小值,即:Cmin=n-1;Mmin=0;所以,冒泡排序最好的时间复杂度为O(n)。

  1. 如果很不幸我们的数据是反序的,则需要进行n-1趟排序。每趟排序要进行n-i次比较(1≤i≤n-1),且每次比较都必须移动记录三次来达到交换记录位置。在这种情况下,比较和移动次数均达到最大值: image 冒泡排序的最坏时间复杂度为:O(n2)
    综上所述:冒泡排序总的平均时间复杂度为:O(n2) 。

相关文章

  • new Date在ie浏览器的兼容性

    1.如果时间是2018-07-21 08:00使用ie浏览器输出new Date("2018-07-21 08:0...

  • 试试

    《180721 Lake Tahoe(太好湖).景》 ---- 2018-07-21 ~ 2018-07-27. ...

  • 180721 Lake Tahoe(太好湖).人物

    2018-07-21 ~ 2018-07-27。 Lake Tahoe。地处北加州的大山之中。 中文怎么翻译都好听...

  • 坚毅一书心得体会

    2018-07-21 10:48 · 字数 1532 · 阅读 80 · 日记本 博野038孔新国 今天终于在作者...

  • 96--郭洁-《如何阅读》读后感

    2018-07-21 22:50 · 字数 340 · 阅读 2 · 日记本 前期有点忙,最近稍微好点,赶紧看看书...

  • 180721 Lake Tahoe(太好湖).景

    2018-07-21 ~ 2018-07-27. Lake Tahoe (太好湖) 在太好湖的一角,有一个翡翠湾。...

  • 《成为高手的方法:刻意练习》视频  -- 李善友

    《成为高手的方法:刻意练习》视频 -- 李善友 (摘自万维刚“万万没想到”) 2018-07-21 我已经知道什么...

  • 2018-07-21

    2018-07-21 (稻盛哲学学习会)打卡第121天 姓名:占晓敏 部门:分水碶 组别:利他二组 【知~学习】 ...

  • 2018-07-21

    2018-07-21 【日精进打卡第99天】 姓名:李光明 公司:宁波万尚进出口有限公司 【知~学习】 诵读《京瓷...

  • 光明正大的追求利润

    2018-07-21 (稻盛哲学学习会)打卡第123天 姓名:王燕君 部门:分水碶 组别:利他三组 【知~学习】 ...

网友评论

      本文标题:2018-07-21

      本文链接:https://www.haomeiwen.com/subject/fuqhmftx.html