冒泡排序(冒泡排序的时间复杂度是多少)
haoteby 2025-07-27 20:07 26 浏览
冒泡排序(Bubble Sort)是一种简单的排序算法,其基本思想是对待排序的元素从前向后依次比较相邻的两个元素,如果顺序不对则交换它们的位置,轮比较下来,最大的元素就会“冒泡”到数组的末尾重复这个过程,直到没有需要交换的元素为止,排序完成。
算法步骤 :
- 比较相邻的元素。如果第一个比第二个大,就交换他们两个。
- 对每一对相邻元素作同样的工作,从开始第一对到结尾的最后一对。这步做完后,最后的元素会是最大的数。
- 针对所有的元素重复以上的步骤,除了最后一个。
- 持续每次对越来越少的元素重复上面的步骤,直到没有任何一对数字需要比较。
时间复杂度
在通常情况下。冒泡排序的总比较次数 = (n - 1) + (n - 2) + ... + 2 + 1。冒泡排序的时间复杂度是O(n^2),空间复杂度是O(1)
适用场景
冒泡排席,它是一种稳定的排序算法,适用于处理小规模数据。不适合处理大规模数据,对于大规模数据的排序效率不高,不堆荐使用。当需要对大规模数据进行排席时,可以考虑其他排序算法,如归并排序、快速排序等
动图演示 :
我们通过以下动图来看冒泡排序的整个过程,图中浅蓝色的柱子为还未在正确位置的数,绿色的两个柱子为正在比较的数,橘黄色的柱子为已经在正确位置的数。通过动图可知,外循环的次数(趟数)为:数组元素的个数- 1,则外循环次数可以表示成如下:
外循环次数(趟数) : n-1
内循环次数(每趟需要比较次数)为 : 数组元素的个数 - 1 - (已经结束的趟数)
每趟比较次数 : n - 1 - i(已经结束的趟数)
Java 代码实现 :
public class BubbleSort { | |
public static void main(String[] args) { | |
int[] arr = {64, 34, 25, 12, 22, 11, 90}; | |
bubbleSort(arr); | |
System.out.println("Sorted array is"); | |
printArray(arr); | |
} | |
static void bubbleSort(int[] arr) { | |
int n = arr.length; | |
for (int i = 0; i < n-1; i++) { | |
for (int j = 0; j < n-i-1; j++) { | |
if (arr[j] > arr[j+1]) { | |
// swap arr[j+1] and arr[j] | |
int temp = arr[j]; | |
arr[j] = arr[j+1]; | |
arr[j+1] = temp; | |
} | |
} | |
} | |
} | |
/* Prints the array */ | |
static void printArray(int arr[]) { | |
int n = arr.length; | |
for (int i=0; i<n; ++i) { | |
System.out.print(arr[i] + " "); | |
} | |
System.out.println(); | |
} | |
} |
python代码
def bubble_sort(arr): | |
n = len(arr) | |
for i in range(n): | |
for j in range(0, n - i - 1): | |
if arr[j] > arr[j + 1] : | |
arr[j], arr[j + 1] = arr[j + 1], arr[j] | |
return arr | |
# 测试排序函数 | |
arr = [64, 34, 25, 12, 22, 11, 90] | |
print("原始数组是:") | |
print(arr) | |
bubble_sort(arr) | |
print("\n排序后的数组是:") | |
print(arr) |
相关推荐
- 一日一技:用Python程序将十进制转换为二进制
-
用Python程序将十进制转换为二进制通过将数字连续除以2并以相反顺序打印其余部分,将十进制数转换为二进制。在下面的程序中,我们将学习使用递归函数将十进制数转换为二进制数,代码如下:...
- 十进制转化成二进制你会吗?#数学思维
-
六年级奥赛起跑线:抽屉原理揭秘。同学们好,我是你们的奥耀老师。今天一起来学习奥赛起跑线第三讲二进制计数法。例一:把十进制五十三化成二进制数是多少?首先十进制就是满十进一,二进制就是满二进一。二进制每个...
- 二进制、十进制、八进制和十六进制,它们之间是如何转换的?
-
在学习进制时总会遇到多种进制转换的时候,学会它们之间的转换方法也是必须的,这里分享一下几种进制之间转换的方法,也分享两个好用的转换工具,使用它们能够大幅度的提升你的办公和学习效率,感兴趣的小伙伴记得点...
- c语言-2进制转10进制_c语言 二进制转十进制
-
#include<stdio.h>intmain(){charch;inta=0;...
- 二进制、八进制、十进制和十六进制数制转换
-
一、数制1、什么是数制数制是计数进位的简称。也就是由低位向高位进位计数的方法。2、常用数制计算机中常用的数制有二进制、八进制、十进制和十六进制。...
- 二进制、十进制、八进制、十六进制间的相互转换函数
-
二进制、十进制、八进制、十六进制间的相互转换函数1、输入任意一个十进制的整数,将其分别转换为二进制、八进制、十六进制。2、程序代码如下:#include<iostream>usingna...
- 二进制、八进制、十进制和十六进制等常用数制及其相互转换
-
从大学开始系统的接触计算机专业,到现在已经过去十几年了,今天整理一下基础的进制转换,希望给还在上高中的表妹一个入门的引导,早日熟悉这个行业。一、二进制、八进制、十进制和十六进制是如何定义的?二进制是B...
- 二进制如何转换成十进制?_二进制如何转换成十进制例子图解
-
随着社会的发展,电器维修由继电器时代逐渐被PLC,变频器,触摸屏等工控时代所替代,特别是plc编程,其数据逻辑往往涉及到数制二进制,那么二进制到底是什么呢?它和十进制又有什么区别和联系呢?下面和朋友们...
- 二进制与十进制的相互转换_二进制和十进制之间转换
-
很多同学在刚开始接触计算机语言的时候,都会了解计算机的世界里面大多都是二进制来表达现实世界的任何事物的。当然现实世界的事务有很多很多,就拿最简单的数字,我们经常看到的数字大多都是十进制的形式,例如:我...
- 十进制如何转换为二进制,二进制如何转换为十进制
-
用十进制除以2,除的断的,商用0表示;除不断的,商用1表示余0时结束假如十进制用X表示,用十进制除以2,即x/2除以2后为整数的(除的断的),商用0表示;除以2除不断的,商用1表示除完后的商0或1...
- 十进制数如何转换为二进制数_十进制数如何转换为二进制数举例说明
-
我们经常听到十进制数和二进制数,电脑中也经常使用二进制数来进行计算,但是很多人却不清楚十进制数和二进制数是怎样进行转换的,下面就来看看,十进制数转换为二进制数的方法。正整数转二进制...
- 二进制转化为十进制,你会做吗?一起来试试吧
-
今天孩子问把二进制表示的110101改写成十进制数怎么做呀?,“二进制”简单来说就是“满二进一”,只用0和1共两个数字表示,同理我们平常接触到的“十进制”是“满十进一”,只用0-9共十个数字表示。如果...
- Mac终于能正常打游戏了!苹果正逐渐淘汰Rosetta转译
-
Mac玩家苦转译久矣!WWDC2025苹果正式宣判Rosetta死刑,原生游戏时代终于杀到。Metal4光追和AI插帧技术直接掀桌,连Steam都连夜扛着ARM架构投诚了。看到《赛博朋克2077》...
- 怎么把视频的声音提出来转为音频?音频提取,11款工具实测搞定
-
想把视频里的声音单独保存为音频文件(MP3/AAC/WAV/FLAC)用于配音、播客、听课或二次剪辑?本文挑出10款常用工具,给出实测可复现的操作步骤、优缺点和场景推荐。1)转换猫mp3转换器(操作门...
- 6个mp4格式转换器测评:转换速度与质量并存!
-
MP4视频格式具有兼容性强、视频画质高清、文件体积较小、支持多种编码等特点,适用于网络媒体传播。如果大家想要将非MP4格式的视频转换成MP4的视频格式的话,可以使用MP4格式转换器更换格式。本文分别从...