排序算法 之 冒泡排序

排序算法:冒泡排序 前言 对于Java程序员来说,一般对于算法没有什么要求,但是有一个算法除外——排序算法。排序算法不仅在日常开发中经常用到,还是面试中几乎必问的题目,并且通常是以“手写代码”的形式出现,因此掌握好排序算法是对每一个程序员的最基本要求。 谈到排序算法,第一个浮现在我们脑中的一定是“冒泡排序”。“冒泡排序”由于较简单的过程,得到大多数程序员的“厚爱”,本文将简单的介绍排序算法的整个过程。 ... 阅读详情

语言是表达算法的工具,语言本身并没有多大的难度,要么读懂代码,要么根据熟练的算法就行编码。

因此,熟练的掌握尤其是真正的理解算法本省真得很重要,当你理解了算法的模型,用某种语言把它表达出来也就简单多了。

还是从排序算法开始总结吧,大学四年没怎么对编程做过练习更谈不上研究总结,工作两年了每天从事着各种杂事,竟然把基本的算法都给忽视了,悲催至极啊。

言归正传,没有多么难的东西,只有你去没去看,有没有去做,看了,理解了,做了,自然就熟悉了。

---------------------------------------------------------------------------------------------------------------------------------------------------------------------

箴言: 如果你想得到你从没有得到过的东西,你就必须做一些你从来就没有做过的事情!

1. 冒泡排序:

摘自 百度百科

http://baike.baidu.com/view/254413.htm

基本概念

  冒泡排序(BubbleSort)的基本概念是:依次比较相邻的两个数,将小数放在前面,大数放在后面。即在第一趟:首先比较第1个和第2个数,将小数放前,大数放后。然后比较第2个数和第3个数,将小数放前,大数放后,如此继续,直至比较最后两个数,将小数放前,大数放后。至此第一趟结束,将最大的数放到了最后。在第二趟:仍从第一对数开始比较(因为可能由于第2个数和第3个数的交换,使得第1个数不再小于第2个数),将小数放前,大数放后,一直比较到倒数第二个数(倒数第一的位置上已经是最大的),第二趟结束,在倒数第二的位置上得到一个新的最大数(其实在整个数列中是第二大的数)。如此下去,重复以上过程,直至最终完成排序。

 

  由于在排序过程中总是小数往前放,大数往后放,相当于气泡往上升,所以称作冒泡排序。

 

  用二重循环实现,外循环变量设为i,内循环变量设为j。假如有10个数需要进行排序,则外循环重复9次,内循环依次重复9,8,...,1次。每次进行比较的两个元素都是与内循环j有关的,它们可以分别用a[j]和a[j+1]标识,i的值依次为1,2,...,9,对于每一个i,j的值依次为1,2,...10-i。

 

void bubble_sort(int array[],int n) 

  { 

  int i,j,flag,temp; 

  for(i = 0; i < n-1; i++) 

  { 

  flag = 1; 

  for(j = 0; j < n-i-1; j++) 

  { 

	  if(array[j] > array[j+1]) 

  { 

	  temp= array[j]; 

	  array[j] = array[j+1]; 

	  array[j+1] = temp; 

	  flag = 0; 

  } 

  } 

  if(1 == flag) 

  { 

	  printf("%d ",i); //首先打印出,在第几层循环时顺序已排好 

	  break; //跳出循环 

  } 

  } 

  return; 

  } 

VC 建工程练习如下:

// bubbleSort.cpp : Defines the entry point for the console application.
//

#include "stdafx.h"
#include <stdlib.h>

void bubble_sort(void);

int main(int argc, char* argv[])
{
	//printf("Hello World!\n");
	bubble_sort();
	system("pause");

	return 0;
}

void bubble_sort(void)
{
	int i,j,temp;

	int array[5] = {3,8,2,1,9};
	#define N 5

	//print original array firstly
	for(i = 0; i < N; i++)
		printf("The original array[%d] is: %d \n", i,array[i]);

	for(i = 0; i < N-1; i++)
		for(j = 0; j < N-i-1; j++)
		{
			if(array[j] > array[j+1])
			{
				temp = array[j];
				array[j] = array[j+1];
				array[j+1] = temp;
			}
		}

		//print array after bubble sort
		for(i = 0; i < N; i++)
			printf("Array after bubble sort is array[%d]: %d \n", i, array[i]);

}


助记:

冒泡排序

双重循环

外循环 N-1 次

内循环 N-i-1 次比较

冒双外N-1内N-i-1 

排序算法-常用的排序算法冒泡排序优化 排序算法 冒泡排序优化 阅读详情

相关推荐

python实现排序算法——冒泡排序

       使用python实现冒泡排序算法,冒泡排序法是非常经典并且非常简单有效的排序算法。首先我们介绍一下冒泡排序算法。 算法步骤: Step 1: 比较第一个数和第二个数,如果第一个数比第二个数大,那么就调换两个数的位置。 Step 2: 按照step 1中的做法,依次比较序列中所有相邻的两个数。此时,序列中最大的数已经“沉”到了最后面。 Step...

海军上将光之翼的博客 1268

【详解排序算法】冒泡排序

大家好🙌我是你们的好朋友,大数据老虾😀。相遇是缘,既然来了就拎着小板凳坐下来一起唠会儿😎,如果在文中有所收获,请别忘了一键三连,动动你发财的小手👍,你的鼓励,是我创作的动力😁!废话不多说,直接😎 开干吧! PS:文末干货,记得拎着小板凳离开的时候也给它顺走 🤣 座右铭:“懒”对一个人的毁灭性有多大,早起的重要性就多大。 冒泡排序【排序算法】冒泡排序算法解析流程图进行解析案列详解算法实现算法特性算法优化文末彩蛋🤩 【排序算法】冒泡排序 算法解析 冒泡排序是最基础的排序算法,由于它的直观性,经常被作为首个介

程序员乌拉的博客! 2582

排序算法 - 冒泡排序

本文介绍了冒泡排序的基本原理和 Java 实现,并对算法进行了优化。冒泡排序通过比较相邻元素并交换位置,使最大元素 “冒泡” 到数组末尾,重复 n-1 趟排序后实现数组升序。本文最后对冒泡排序进行了复杂度和稳定性的评估并指出该算法的优缺点和适用情况。

iguyi的博客 1151

冒泡排序法

首先注意sizeof和strlen再算字符串大小时的区别: strlen只能求字符串长度,遇到\0即停止计数,不算\0;是库函数; sizeof计算变量,数组,类型的大小;单位为字节;计算\0;是操作符。(计算数组时,不存在\0的情况) 冒泡排序法:(以从大到小为例) 顾名思义,就是大数一点一点往上浮,小数一点一点往下沉。 此方法需要两个循环,一个外循环,一个内循环。外循环表示有几个数需要被操作排列,内循环表示一个数需要与其他数比较几次。 先说内循环:内循环表示一个数被比较几次。

m0_73685731的博客 1086

步进电机梯形加减速算法的实现

步进电机梯形加减速算法的实现

m0_69251699的博客 1318

高德地图JSAPI中旋转Marker点标签图片时候,且不旋转lable内容方法。

高德地图JSAPI中旋转Marker点标签图片时候,且不旋转lable内容方法

weixin_42960380的博客 2500

冒泡排序法简单理解

冒泡排序法

m0_47593192的博客 669

保姆级教程:用GROMACS 2022.4的拉伸模拟(SMD)加速蛋白-蛋白组装过程

本文详细介绍了如何使用GROMACS 2022.4的拉伸分子动力学模拟(SMD)技术加速大蛋白组装过程。通过CHARMM36力场和SMD技术,将传统需要数月的蛋白结合过程缩短至数天,大幅提升模拟效率。文章包含参数设计、索引组创建、周期性边界处理等实战技巧,并提供了完整的GPU加速工作流和常见问题解决方案。

weixin_30338481的博客 445

关于冒泡排序的简单说明

以下是个人对于冒泡排序的一点见解,如有错误,欢迎大家指出纠正 1.冒泡排序是通过双重循环实现的数组排序方法,外层循环控制循环的趟数,而内层循环控制着次数 2.循环嵌套为,外循环执行一次,内循环从头到尾跑一遍 3。首先以数组长度决定外层循环的趟数,通过arr1.length-1获取当前数组长度 4.内层循环控制着比较的次数,为了避免重复比较,所以比较次数需要依次递减,这时只要在arr1.length-1的基础上再减去i的值遍可以实现; 5.接下来设置一个if判断第一个数是否...

m0_61685348的博客 2339

RFSOC实战解析(一):深入RF Data Converter的时钟与数据接口设计

本文深入解析RFSOC中RF Data Converter的时钟与数据接口设计,涵盖GHz采样、数据流处理、时钟树同步及AXI-Stream接口实战。通过详细案例和调试技巧,帮助工程师高效配置IP核,优化ADC/DAC性能,解决跨时钟域和信号完整性等关键问题。

weixin_30955617的博客 473

K2P padavan固件下宽带与IPTV融合

举例说下,假如你的IPTV是拨号的,IPTV端口直接连到笔记本电脑的网口,IP是自动分配的情况下,在VLC里面是可以直接播放“rtp://239.XXX.XXX.XXX:XXXX”的,即使IPTV是DHCP模式,按道理也是可以播放的。家里很少看电视,基本上就是看看春晚,然后平时老人在家没事看看,所以就把广电的机顶盒停掉了,换了一个N1的盒子刷了CoreELEC系统,既可以通过m3u8文件看网络电视,也可以看本地的多媒体,很方便,完全满足了自己的需求。在上图的第三步中,端口设置成大于1024的端口即可。

aplsc的专栏 63万+

Java 冒泡排序法 外层循环n-1,内层循环n-1-i

文章目录算法描述图片描述代码展示记忆口诀 算法描述 依次比较相邻的元素,如果前者比后者大,就交换位置,每次都会从没有比较过的数组元素中挑出来一个最大值放到末尾,直到所有的元素都比较完成后结束说白了这个算法的名字由来是因为越大的元素会经由交换慢慢“浮”到数列的顶端,像气泡一样把最大值依次浮出水面 图片描述 一定要注意是紧邻的两个元素比较,比较出来的较大元素会继续和下一个元素进行比较,直到数组末尾。 代码展示 import java.util.Arrays; import java.util.Scanner

jkjkjkjk_的博客 3279

CTF入门RSA维纳攻击

RSA维纳攻击 一.题目描述 适用于e过大或国过小情况下的RSA加密 题干如下: #coding:utf-8 import gmpy2 import libnum e = 54856417509806712596137531985117125938559627187663765776152288580865785539464797248184444737659643755765127505761012086539564616967122137525108154121304264697865568653100

noj_h的博客 2232

Python排序算法之冒泡排序

冒泡排序是一种简单直观的排序算法;它重复的遍历要排序的数列,一次比较两个元素,如果他们的顺序错误就把他们交换过来。遍历数列的工作是重复的进行直到不再需要交换,也就是说该数列已经排序完成。这个算法的名字由来是因为越小的元素会经过交换慢慢“浮”到数列的顶端。比较相邻的元素。如果第一个比第二个大,就交换他们两个。对每一对相邻元素作同样的工作,从开始第一对到结尾的最后一对。这步做完后,最后的元素会是最大的数。针对所有的元素重复以上的步骤,除了最后一个。

程序员小芽的博客 8659

BMS硬件设计核心:安全、精度与EMC的工程平衡

电池管理系统(BMS)是保障锂电安全运行的关键嵌入式子系统,其本质是在高精度模拟测量、实时故障响应与复杂电磁环境适应性之间达成工程平衡。原理上,BMS依赖专用监测芯片(如BQ76920)实现微秒级硬件保护,结合主控MCU(如STM32)完成策略决策与通信管理,形成‘安全协处理器+智能主控’双架构。技术价值体现在对过压/欠压/过流/温度等多维故障的毫秒级闭环处置能力,支撑SOC/SOH估算可信度与系统鲁棒性。典型应用场景涵盖电动工具、轻型电动车及储能模块等中低串数电池组。本文聚焦BMS控制板在时钟布局、电源滤

weixin_30591519的博客 70

懒人必备!Coze一键制作火柴人心理学视频,新号45天涨了2.6w粉!(附超详细实战教程)

其实,只需要借助扣子(https://www.coze.cn/),采用的是 AI 智能体工作流模式,这种模式能够一站式搞定上述所有环节,一条四五十秒的视频,短短一两分钟就能轻松搞定!让制作效率提升了整整百倍!在这篇教程里,我将毫无保留地为大家分享,如何使用扣子 Coze 批量制作 “火柴人风格的心理学视频” 的超详细步骤。

李同学Lino的博客 3853

排序算法之冒泡排序

冒泡排序法作为最基础的排序算法之一,为我们理解和学习其他排序算法奠定了基础。通过深入理解冒泡排序法的原理、掌握实现方法以及了解优化技巧,我们可以更好地应用它,并能够更好地理解其他高级排序算法。尽管冒泡排序法在实际应用中的效率有限,但通过对排序算法的学习和探索,我们能够发现更多高效的算法。今天的分享就到这里啦~

qq_64928278的博客 3686

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

【排序算法】冒泡排序

冒泡排序是一种简单但低效的排序算法。它重复地走访要排序的元素列,一次比较两个元素,如果它们的顺序错误就交换它们,直到没有元素需要交换。这个过程类似于气泡在水中上浮的过程,因而得名冒泡排序。冒泡排序的实现非常简单,但效率较低,特别是在大型数据集上。它的时间复杂度为O(n^2),其中n是要排序的元素个数。尽管如此,在某些特定情况下,冒泡排序仍然是一种简单且有效的选择。下面我将详细介绍冒泡排序的原理、实现以及一个Java语言的示例。冒泡排序是一种简单直观的排序算法,但其时间复杂度较高,特别是在数据量较大时。

lmj3732018的博客 4945

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

排序算法之一 冒泡排序(Bubble Sort)

概述 冒泡排序是一种极其简单的排序算法,它重复地走访过要排序的元素,依次比较相邻两个元素,如果它们的顺序错误就把他们调换过来,直到没有元素再需要交换,排序完成。这个算法的名字由来是因为越小(或越大)的元素会经由交换慢慢“浮”到数列的顶端。尽管冒泡排序是最容易了解和实现的排序算法之一,但它对于少数元素之外的数列排序是很没有效率的。 算法描述 1.比较相邻的元素,如果前一个比后一个大,就把它们两个对调...

Markus 2599

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

【十大排序算法】冒泡排序

在排序的大海上,冒泡排序像一朵花朵般绽放, 每个元素都像是水珠,跃动在涟漪的波浪中。 它们轻轻上浮,与周围的元素相比较, 若自身更大,便悄然交换位置。 这是一场缓慢的舞蹈,每一步都小心翼翼, 直到所有元素都找到了自己的位置, 像是夜空中闪烁的星星,它们最终静静地排列, 形成了一个美妙的序列,闪耀着排序的光芒。

DC1020的博客 1355

排序算法——冒泡排序

冒泡排序 冒泡排序是我学习的第二个排序算法 它的特点是,每组所需要的数据都会像吐泡泡一样向上冒出 看下面的例子 若有一个数组m = [5, 3, 4, 2, 1],将其从小到大排列 5 3 4 1 2 5 3 1 4 2 5 1 3 4 2 1 5 3 4 2 第一轮排序将1冒泡到最前面 1 5 3 2 4 1 5 2 3 4 1 2 5 3 4 第二轮排序将2冒泡到第二个位置 1 2 5 3 4 1 2 3 5 4 第三轮排序将3冒泡到最前面 1 2 3 5 4 1 2 3 4 5 最后一轮排序将4

私のBookShelf 256

常见排序算法——冒泡排序和选择排序

选择排序也属于内部排序法,是从欲排序的数据中,按指定的规则选出某一元素,再依规定交换位置后达到排序的目的。

java小豪的博客 5412
上一篇: 理解总线 & I2C总线
下一篇: 线性表--- 顺序表
windtakers
博客等级 码龄17年 94粉丝 197原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值