ZJ-010期算法:冒泡排序
Posted 程序媛日常吖
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了ZJ-010期算法:冒泡排序相关的知识,希望对你有一定的参考价值。
前言:
往期回顾:
【ZJ-001期】数据结构(一):数组
【ZJ-002期】数据结构(二):队列
【ZJ-003期】数据结构(三):栈
【ZJ-004期】数据结构(四):单链表
【ZJ-005期】数据结构(五):双链表
【ZJ-006期】数据结构(六):二叉树
【ZJ-007期】数据结构(七):二叉搜索树
【ZJ-008期】数据结构(八):二叉搜索树删除
【ZJ-009期】算法(一):贪心算法
今日内容:
大家好哈~~~接下来的几天是排序算法,大家可以随我看我一下噢。
什么是冒泡排序?
比较相邻的元素。如果第一个比第二个大,就交换它们两个;
对每一对相邻元素作同样的工作,从开始第一对到结尾的最后一对,这样在最后的元素应该会是最大的数;
针对所有的元素重复以上的步骤,除了最后一个;
重复步骤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期算法:冒泡排序的主要内容,如果未能解决你的问题,请参考以下文章