ZJ-010期算法:冒泡排序

Posted 程序媛日常吖

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了ZJ-010期算法:冒泡排序相关的知识,希望对你有一定的参考价值。

前言:                                                     

在拿下字节跳动之前 若出现断更的情况,欢迎每一位关注的小伙伴 进群抢红包仅限断更当日【ZJ-010期】算法(二):冒泡排序。加入断更红包群请关注公众号并回复:断更红包。⬇️⬇️

【ZJ-010期】算法(二):冒泡排序

往期回顾:                                                

【ZJ-001期】数据结构(一):数组【ZJ-002期】数据结构(二):队列【ZJ-003期】数据结构(三):栈【ZJ-004期】数据结构(四):单链表【ZJ-005期】数据结构(五):双链表【ZJ-006期】数据结构(六):二叉树【ZJ-007期】数据结构(七):二叉搜索树【ZJ-008期】数据结构(八):二叉搜索树删除【ZJ-009期】算法(一):贪心算法


今日内容:                                                

大家好哈~~~接下来的几天是排序算法,大家可以随我看我一下噢。


【ZJ-010期】算法(二):冒泡排序什么是冒泡排序?

  1. 比较相邻的元素。如果第一个比第二个大,就交换它们两个;

  2. 对每一对相邻元素作同样的工作,从开始第一对到结尾的最后一对,这样在最后的元素应该会是最大的数;

  3. 针对所有的元素重复以上的步骤,除了最后一个;

  4. 重复步骤1,2,3,直到排序完成。


如何实现冒泡排序?

public class Solution {  public static void main(String[] args) { //冒泡排序算法        int[] numbers=new int[]{1,3,5,2,4,}; //需进行length-1次冒泡        for(int i = 0; i < numbers.length-1; i++) {            for(int j = 0;j < numbers.length-1-i; j++) {                if(numbers[j] > numbers[j+1]) { int temp = numbers[j]; numbers[j] = numbers[j+1]; numbers[j+1] = temp; } } }        System.out.println("正序排列后的结果是:"); for(i = 0; i < numbers.length; i++) {            System.out.print(numbers[i]+",");
       }
}
}


冒泡排序时间复杂度

情景一:初始数据正序

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


情景二:初始数据倒序

需要进行n-1趟排序。每趟排序要进行n-i次比较(1≤i≤n-1),且每次比较都必须移动记录三次来达到交换记录位置。在这种情况下,比较和移动次数均达到最大值:

Cmax=n(n-1)/2;       

Mmax=3n(n-1)/2;

即最坏情况下时间复杂度为O(n2)【n的平方】。


综上所述,冒泡排序总的平均时间复杂度为:O(n2) 。





好了,今天就到这里,感谢各位看官到这里~



以上是关于ZJ-010期算法:冒泡排序的主要内容,如果未能解决你的问题,请参考以下文章

JS实现两种实用的排序算法—冒泡快速排序

常见的排序算法总结(JavaScript)

四种排序算法实现

排序算法之冒泡选择插入排序(Java)

排序算法之冒泡选择插入排序(Java)

排序算法_冒泡排序(算法设计与C代码实现)