01-01 排序-冒泡排序

01_冒泡排序 TypeScript实现十大排序算法(一) - 冒泡排序 一. 冒泡排序的定义 冒泡排序是一种简单的排序方法。 基本思路是通过两两比较相邻的元素并交换它们的位置,从而使整个序列按照顺序排列。该算法一趟排序后,最大值总是会移到数组最后面,那么接下来就不用再考虑这个最大值。一直重复这样的操作,最终就可以得到排序完成的数组。 这种算法是稳定的,即相等元素的相对位置不会发生变化。 而且在最坏情况下,时间复杂度为O(n^2),在最好情况下,时间复杂度为O(n)。 因此,冒泡排序适用于数据规模小的场景。 二. 阅读详情

先祭上视频


冒泡排序,欢迎来我的B站逛逛

原理

  1. 比较相邻的元素。如果第一个比第二个大,就交换他们两个。
  2. 对每一对相邻元素做同样的工作,从开始第一对到结尾的最后一对。在这一点,最后的元素应该会是最大的数。
  3. 针对所有的元素重复以上的步骤,除了最后一个。
  4. 持续每次对越来越少的元素重复上面的步骤,直到没有任何一对数字需要比较。

分析

时间复杂度:O(n)
算法稳定性:稳定排序算法

算法描述

C
#include <stdio.h>
 
#define ARR_LEN 255 /*数组长度上限*/
#define elemType int /*元素类型*/
 
/* 冒泡排序 */
/* 1. 从当前元素起,向后依次比较每一对相邻元素,若逆序则交换 */
/* 2. 对所有元素均重复以上步骤,直至最后一个元素 */
/* elemType arr[]: 排序目标数组; int len: 元素个数 */
void bubbleSort (elemType arr[], int len) {
    elemType temp;
    int i, j;
    for (i=0; i<len-1; i++) /* 外循环为排序趟数,len个数进行len-1趟 */
        for (j=0; j<len-1-i; j++) { /* 内循环为每趟比较的次数,第i趟比较len-i次 */
            if (arr[j] > arr[j+1]) { /* 相邻元素比较,若逆序则交换(升序为左大于右,降序反之) */
                temp = arr[j];
                arr[j] = arr[j+1];
                arr[j+1] = temp;
            }
        }
}
 
int main (void) {
    elemType arr[ARR_LEN] = {3,5,1,-7,4,9,-6,8,10,4};
    int len = 10;
    int i;
     
    bubbleSort (arr, len);
    for (i=0; i<len; i++)
        printf ("%d\t", arr[i]);
    putchar ('\n');
     
    return 0;
}
C++
#include <iostream>
using namespace std;
template<typename T>
//整数或浮点数皆可使用
void bubble_sort(T arr[], int len)
{
    int i, j;  T temp;
    for (i = 0; i < len - 1; i++)
        for (j = 0; j < len - 1 - i; j++)
        if (arr[j] > arr[j + 1])
        {
            temp = arr[j];
            arr[j] = arr[j + 1];
            arr[j + 1] = temp;
        }
}
int main()
{
    int arr[] = { 61, 17, 29, 22, 34, 60, 72, 21, 50, 1, 62 };
    int len = (int) sizeof(arr) / sizeof(*arr);
    bubble_sort(arr, len);
    for (int i = 0; i < len; i++)
        cout << arr[i] << ' ';
 
    cout << endl;
 
    float arrf[] = { 17.5, 19.1, 0.6, 1.9, 10.5, 12.4, 3.8, 19.7, 1.5, 25.4, 28.6, 4.4, 23.8, 5.4 };
    len = (int) sizeof(arrf) / sizeof(*arrf);
    bubble_sort(arrf, len);
    for (int i = 0; i < len; i++)
        cout << arrf[i] << ' ';
 
    return 0;
}
Java
    public static void bubbleSort(int arr[]) {
 
        for(int i =0 ; i<arr.length-1 ; i++) { 
           
            for(int j=0 ; j<arr.length-1-i ; j++) {  
 
                if(arr[j]>arr[j+1]) {
                    int temp = arr[j];
                     
                    arr[j]=arr[j+1];
                     
                    arr[j+1]=temp;
            }
            }    
        }
    }
JavaScript
function bubbleSort(arr) {
    var i = arr.length, j;
    var tempExchangVal;
    while (i > 0) {
        for (j = 0; j < i - 1; j++) {
            if (arr[j] > arr[j + 1]) {
                tempExchangVal = arr[j];
                arr[j] = arr[j + 1];
                arr[j + 1] = tempExchangVal;
            }
        }
        i--;
    }
    return arr;
}
 
var arr = [3, 2, 4, 9, 1, 5, 7, 6, 8];
var arrSorted = bubbleSort(arr);
console.log(arrSorted);
alert(arrSorted);
Objective-C
 for (int i = 0; i<result.count-1; i++) {
        for (int j = 0; j<result.count-1-i; j++) {
            NSInteger left = [result[j] integerValue];
            NSInteger right = [result[j+1] integerValue];
            if (left>right) {
                [result exchangeObjectAtIndex:j withObjectAtIndex:j+1];
            }
        }
    }
NSLog(@"%@",result);
Swift
func bubbleSort(_ nums: inout [Int]) {
    let n = nums.count
    for i in 0..<n {
        for j in 0..<(n - 1 - i) {
            if nums[j] > nums[j + 1] {
                nums.swapAt(j, j + 1)
            }
        }
    }
    print(nums)
}
 
var nums = [1,3,7,8,9]
bubbleSort(&nums)
C#
冒泡算法C#
namespace 数组排序
{
    class Program
    {
        static void Main(string[] args)
        {
            int temp = 0;
            int[] arr = {23, 44, 66, 76, 98, 11, 3, 9, 7};
            #region该段与排序无关
            Console.WriteLine("排序前的数组:");
            foreach (int item in arr)
            {
                Console.Write(item + "");
            }
            Console.WriteLine();
            #endregion
            for (int i = 0; i < arr.Length - 1; i++)
            {
                #region将大的数字移到数组的arr.Length-1-i
                for (int j = 0; j < arr.Length - 1 - i; j++)
                {
                    if (arr[j] > arr[j + 1])
                    {
                        temp = arr[j + 1];
                        arr[j + 1] = arr[j];
                        arr[j] = temp;
                    }
                }
            #endregion
            }
            Console.WriteLine("排序后的数组:");
            foreach (int item in arr)
            {
                Console.Write(item+"");
            }
            Console.WriteLine();
            Console.ReadKey();
        }
    }
}
Python3
def bubble_sort(nums):
    for i in range(len(nums) - 1):  # 这个循环负责设置冒泡排序进行的次数
        for j in range(len(nums) - i - 1):  # j为列表下标
            if nums[j] > nums[j + 1]:
                nums[j], nums[j + 1] = nums[j + 1], nums[j]
    return nums
 
print(bubble_sort([45, 32, 8, 33, 12, 22, 19, 97]))
# 输出:[8, 12, 19, 22, 32, 33, 45, 97]

优化

  • 问题:数据的顺序排好之后,冒泡算法仍然会继续进行下一轮的比较,直到arr.length-1次,后面的比较没有意义的。
  • 解决方案:设置标志位flag,如果发生了交换flag设置为true;如果没有交换就设置为false。
    这样当一轮比较结束后如果flag仍为false,即:这一轮没有发生交换,说明数据的顺序已经排好,没有必要继续进行下去。
  • 以Java为例:
public static void BubbleSort1(int [] arr){
 
 
    int temp;//临时变量
 
    boolean flag;//是否交换的标志
 
    for(int i=0; i<arr.length-1; i++){   //表示趟数,一共 arr.length-1 次
 
 
        // 每次遍历标志位都要先置为false,才能判断后面的元素是否发生了交换
 
        flag = false;
 
        
 
        for(int j=arr.length-1; j>i; j--){ //选出该趟排序的最大值往后移动
 
 
            if(arr[j] < arr[j-1]){
 
                temp = arr[j];
 
                arr[j] = arr[j-1];
 
                arr[j-1] = temp;
 
                flag = true;    //只要有发生了交换,flag就置为true
 
            }
 
        }
 
        // 判断标志位是否为false,如果为false,说明后面的元素已经有序,就直接return
 
        if(!flag) break;
 
    }
 
 }
浅谈车联网概述-1 车联网技术目前在车企中应用广泛,车联网通过车载传感器、无线通信等技术,能够将车辆上百的传感器数据上传至云端,当前智能网联车辆可以理解为一个“大号”手机。 阅读详情

相关推荐

python 爬取携程全国旅游景点信息-2024.4.13

携程网是中国领先的在线旅行服务公司,提供酒店预订、机票预订、旅游度假、商旅管理等服务。携程网上有大量的旅游景点和酒店信息,这些信息对于旅行者和旅游业者都有很大的价值。通过爬虫技术,我们可以从携程网上获取这些信息,并进行数据清洗、数据分析、数据可视化等操作,从而得到有用的洞察和建议。

britlee的博客 1万+

python冒泡排序函数_python冒泡排序-Python,冒泡排序

arr=[7,4,3,67,34,1,8].defbubble_sort:最近在学习Python,下面是我的一些笔记冒泡排序实现思路: 使用双重for循环,内层变量为i, 外层为j,在内层循环中不断的比较相邻的两个值(i, i+1)的大小,如果i+1的值大于i的值,交换两者位置,每循环一次,外层的j增加1,等到j等于n-1的时候,结束循环第一次看不懂很正常,不要灰心,下面是使用代码的实现arr =...

weixin_39549110的博客 2343

YOLOv8剪枝实战:基于torch_pruning的模型优化与性能提升指南

本文详细介绍了如何使用torch_pruning工具对YOLOv8模型进行结构化剪枝,以实现模型轻量化与性能提升。通过实战步骤解析,包括环境搭建、依赖图分析、迭代剪枝与微调策略,帮助开发者有效减少模型参数量和计算量,提升在边缘设备上的推理速度,同时保持检测(detect)与分割(segment)任务的精度。

water的专栏 1122

数据结构与算法(二):带你读懂冒泡排序(Bubble Sorting)

参考文章: https://www.cnblogs.com/onepixel/articles/7674659.html https://blog.youkuaiyun.com/Hydra_shuang/article/details/82801957 https://blog.youkuaiyun.com/u011109881/article/details/80038573

Coder编程的博客 1111

手把手教你用ComfyUI搭建高效AI绘画工作流:从基础到高级技巧

本文详细介绍了如何使用ComfyUI构建高效的AI绘画工作流,从基础配置到高级技巧全面覆盖。通过模块化设计,ComfyUI显著提升显存利用率和创作灵活性,适合从新手到专业用户。文章包含部署指南、工作流搭建、性能优化及行业应用案例,帮助读者快速掌握AI绘画核心技术。

7up55的博客 720

从桨叶设计到电机匹配:手把手教你调出无人机最佳动力组合

本文系统介绍了无人机动力系统的核心匹配原则,重点解析了如何通过测试与数据分析,优化螺旋桨与电机的组合,从而显著提升系统力效与续航。文章提供了从参数解读、实战测试到深度调优的完整指南,帮助开发者解决电机过热、推力不足等常见问题,实现无人机性能最大化。

weixin_29305313的博客 242

php编写冒泡排序算法_PHP排序算法之冒泡排序(Bubble Sort)实现方法详解

本文实例讲述了PHP排序算法之冒泡排序(Bubble Sort)实现方法。分享给大家供大家参考,具体如下:基本思想:冒泡排序是一种交换排序,它的基本思想是:两两比较相邻记录的关键字,如果反序则交换,直到没有反序的记录为止。最简单排序实现:我们先来看看在没有学习各种排序方法前经常使用的排序方法(至少我是这样。。。。)://这里使用了类型提示(type hint) array,不熟悉或者不习惯的同学大...

weixin_28717939的博客 1729

BugkuCTF-PWN题pwn2-overflow超详细讲解

解题思路 1)计算出get_shell_的地址偏移量 2)算出来之后就直接溢出到后门函数 知识点 x64函数调用规则 解题之前我们先学下linux x64的函数调用规则。 x64机器在调用某个函数前,比如int func(int a, int b, int c, int d, int e, int f, int g, int h),首先他会把前6个参数从左往右存入到寄存器rdi、rsi、rdx、rcx、r8、r9,其余参数存入到栈里,保存的顺序是从右往左入栈。比如abcdef会存入到寄存器里,然后一次入栈h

am_03的博客 3013

排序之交换排序01冒泡排序以及改进

交换排序之冒泡排序 时间复杂度: 最好情况: 最坏情况: 平均情况: 空间复杂度: 稳定性

qq_34535590的博客 320

Qt思岚激光雷达

Qt关于思岚激光雷达研究示例,本示例采用qt界面开发,可以串口也可以tcp进行设备连接。接收数据进行相关的数据进行绘图, 这种雷达可以用于大屏触摸场景,会场互动触摸场景开发。 #ifndef MAINWIDGET_H #define MAINWIDGET_H #include <QTimer> #include <QWidget> #include "lidarmgr.h" namespace Ui { class MainWidget; } class MainWidget.

cqltbe131421的博客 1598

共封装光学(CPO):下一代互联革命

Nvidia:产品:Quantum-X Q3450(115.2T,144×800G,2025H2上市)、Spectrum 6800(409.6T,512×800G,2026H2上市);技术路线:TSMC COUPE封装、MRM调制器、光栅耦合、外部激光源(Lumentum/Ayar Labs供应);战略定位:以横向扩展CPO验证供应链,最终聚焦纵向扩展场景(Feynman架构)。

存储随笔 4970

【排序】01.冒泡排序

【排序】01.冒泡排序 基本思想 让最大的数浮动到数组最后的位置,其次大的数浮动到数组倒数第二个位置……即n个数,排n-1次,每次从左到右,依次两两比较大小,将最大的置后。 代码 import java.util.Arrays; public class Solution { public static void main(String[] args) { int arr...

二进制杂谈 171

【万字长文】学习Armv8架构虚拟化一篇就够了

这里我们将介绍一些基础的Hypervisor和虚拟化的理论知识。如果你已经有一定的基础或是已经熟悉了这些概念,可以跳过这部分内容。我们用Hypervisor这个词来定义一种负责创建,管理以及调度虚拟机(Virtual Machines, VMs)的软件。Stage 2 转换允许Hypervisor控制虚拟机的内存视图。具体来说,其可以控制虚拟机是否可以访问特定的某一块物理内存,以及该内存块出现在虚拟机内存空间的位置。这种能力对于虚拟机的隔离和沙箱功能来说至关重要。

叫好与叫座虽然不是对立面,但想在同一个作品中达到双重效果很难。 5320

01冒泡排序

1.普通的冒泡排序 冒泡排序是最简单的排序算法,它通过比较相邻元素并进行交换。 例子:需要排序的数组为[2, 1, 7, 9, 5, 8]。 第一轮排序: [2, 1, 7, 9, 5, 8]->[1, 2, 7, 9, 5, 8],交换,因为2>1 [1, 2, 7, 9, 5, 8]->[1, 2, 7, 9, 5, 8] [1, 2, 7, 9, 5, 8]-&...

Lizune 233

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

Java排序01-冒泡排序

Java排序01-冒泡排序 排序的基本步骤(从小到大): 比较相邻的元素,如果前者比后者大,那就交换这二者的顺序。 从头到尾遍历,对每一对相邻元素都进行比较并按需交换。这步做完后,最后的元素将会是最大的元素。 重复步骤2,此时只需要遍历到(n-1)个位置,因为最后一个元素已经是最大了,无需比较。 持续每次对越来越少的元素重复上面的步骤,直到没有任何一对数字需要比较。 时间复杂度O(n2),空间复杂度O(1) Java实现代码如下,主要使用第二种方法: public class S01_BubbleSor

C++程序猿 225

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

01 冒泡排序

'''冒泡排序:比较相邻的元素,如果第一个比第二个大,就交换位置''' import time start = time.time() def bubble_sort (alist): # 从8-0遍历,step = -1,倒着来. for j in range (len(alist)-1,0,-1): # j = 8,7,6,5,4,3,...

acoikw2620的博客 167

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

算法01 - 排序算法之冒泡排序和选择排序

从入门学起算法的Java小白

weixin_67739446的博客 2240

10种经典排序-冒泡排序 01

冒泡排序、选择排序、插入排序、希尔排序、归并排序、快速排序、堆排序、计数排序、桶排序 以从小到大排序为例: 一、冒泡排序 算法描述: 1. 比较相邻的元素。如果第一个比第二个大,就交换他们两个。 2. 对每一对相邻元素做同样的工作,从开始第一对到结尾的最后一对。在这一点,最后的元素应该会是最大的数。 3. 针对所有的元素重复以上的步骤,除了最后一个。 ...

xueningyang555的博客 200

01.实现冒泡排序

说明 这是排序算法的第一个挑战。给定一个未排序的数组,然后经过排序返回一个有顺序的数组。在接下来的算法挑战中,我们将通过几种不同的方法来实现排序,并在这些不同的方法之间学习一些权衡。虽然大多数现代语言都有内置的这种操作的排序方法,但仍然需要了解一些常见的基本方法,并了解如何实现它们。 冒泡排序 在这里我们将看到冒泡排序。冒泡排序通过重复地走访过要排序的数列,一次比较两个元素,如果他们的顺序错...

幺四四零的博客 259

排序算法01——冒泡排序

冒泡排序 什么是冒泡排序?简而言之,冒泡排序就是重复的遍历待排序的数据,依次比较两个相邻的数据,若他们的顺序不符合规则,则让他们交换一下位置,数据经过反复的交换之后,最后最大或者最小的会一点点的移动到一端。 代码实现 #include<stdio.h> #define N 10 void main() { int a[N]; int i,j,t; printf("input %d numbers:\n",N); for(i=0;i<N;i++) scanf("%d",&

weixin_43601033的博客 177

sort01-冒泡排序

sort冒泡排序Comparable 接口介绍冒泡排序排序原理:冒泡排序的代码实现:排序前:排序后:冒泡排序的时间复杂度分析 冒泡排序 Comparable 接口介绍 Java提供了一个接口Comparable就是用来定义排序规则的。详情参考api文档。 冒泡排序 冒泡排序(Bubble Sort),是一种计算机科学领域的较简单的排序算法 排序原理: 比较相邻的元素。如果前一个元素比后一个元素大...

weixin_44172800的博客 380

算法入门——排序01冒泡排序

冒泡排序 介绍 排序(Sorting)是计算机程序设计中的一种重要操作,它的功能是将一个数据元素(或记录)的任意序列,重新排列成一个按关键字有序的 序列。冒泡排序虽然并不优秀,但是却是众多排序算法中十分经典的一个。也是在学校里我们接触到的第一个排序算法。 平均时间复杂度 O(n2)O(n^2)O(n2) 最好情况 O(n)O(n)O(n) 最坏情况 O(n2)O(n^2)O(n2) 空间复杂度 O(1)O(1)O(1) 稳定性 稳定 图示 每次比较相邻元素,若不符合关键字有序,则将他们交换。 代码 #in

qq_29629083的博客 249

【排序算法】01冒泡排序

先定义一个排序器接口IArraySorter: 1 package org.liws1.sort; 2 3 import java.util.Comparator; 4 5 /** 6 * 排序器接口 7 */ 8 public interface IArraySorter { 9 public <T extends Comparabl...

weixin_30315905的博客 83

01 【JS排序算法】JavaScript实现冒泡排序

写在前面 本文是学习"ben大叔"大佬的相关文章所总结而成。 作为一名前端,你可以不了解复杂的一些算法实现,但是关于排序算法你可要了解和掌握哦,比如以下这几种: 冒泡排序简介 冒泡排序作为排序算法家族中的成员来说,相当于编程语言学习中的"Hello World",因为它是最简单的排序算法。冒泡排序会重复走访待排序序列,每次会比较序列中的相邻两个元素,如果这两个元素的顺序错误,就将它俩位置互换,依次重复进行此操作,直到待排序序列中没有要进行交换的操作为止,就意味着已经完成了排序。由于冒泡排序.

X北辰北的博客 986

排序算法之冒泡排序-01

1、冒泡排序(Bubble Sort) (1)算法概念 冒泡排序是一种简单的排序算法。它重复地走访过要排序的数列,一次比较两个元素,如果它们的顺序错误就把它们交换过来。走访数列的工作是重复地进行直到没有再需要交换,也就是说该数列已经排序完成。这个算法的名字由来是因为越小的元素会经由交换慢慢“浮”到数列的顶端。 (2)算法描述 比较相邻的元素。如果第一个比第二个大,就交换它们两个; 对每一对相邻元素...

驿书达的博客 255
上一篇: PAT 1041 考试座位号 C++版
下一篇: VScode 前端真香插件
Huber Wong
博客等级 码龄6年 117粉丝 83原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Huber Wong

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值