经典算法学习——冒泡排序

      冒泡排序是我们学习的第一种排序算法。应该也算是最简单、最经常使用的排序算法了。

无论怎么说。学会它是必定的。

今天我们就用C语言来实现该算法。

演示样例代码已经上传至:https://github.com/chenyufeng1991/BubbleSort

算法描写叙述例如以下:

(1)比較相邻的前后两个数据。假设前面数据大于后面的数据,就将两个数据交换;

(2)这样对数组的第0个数据到N-1个数据进行一次遍历后。最大的一个数据就到了最后一个位置,也就是下标为N-1的位置(沉到了水底)。

(3)N = N-1,假设N不为0就反复(1)(2)两步,否则排序完毕。也就是对数组的第0个数据到N-2个数据再次进行遍历;


完整的代码实现例如以下:

//
//  main.c
//  BubbleSort
//
//  Created by chenyufeng on 16/1/28.
//  Copyright © 2016年 chenyufengweb. All rights reserved.
//#include <stdio.h>typedef int BOOL;
#define true 1
#define false 0int *bubbleSort01(int arr[],int len);
void bubbleSort03(int arr[],int len);int main(int argc, const char * argv[]) {int array[7] = {150,111,1000,99,300,10,189};/***指针向后移位;*///    int *p = bubbleSort02(array, 7);////    for (int i = 0; i < 7; i++) {//        printf("%d ",*(p+i));//    }/***  能够使用传引用的方式,实现例如以下;这里不须要返回值,直接打印就可以,推荐使用这样的方式,方便。*/bubbleSort04(array, 7);for (int i = 0; i < 7; i++) {printf("%d ",array[i]);}return 0;
}//常规的冒泡;
int *bubbleSort01(int arr[],int len){int temp;for (int i = 0; i < len; i++){for (int j = 1; j < len - i; j++) {if (arr[j - 1] > arr[j]) {temp = arr[j - 1];arr[j - 1] = arr[j];arr[j] = temp;}}}return arr;
}//常规的冒泡,不须要返回值。
void bubbleSort03(int *arr,int len){int temp;for (int i = 0; i < len; i++){for (int j = 1; j < len - i; j++) {if (arr[j - 1] > arr[j]) {temp = arr[j - 1];arr[j - 1] = arr[j];arr[j] = temp;}}}
}


当然也能够把上面的交换元素的代码抽取出来。写成一个交换函数swap。

代码实现例如以下:

//
//  main.c
//  BubbleSort
//
//  Created by chenyufeng on 16/1/28.
//  Copyright © 2016年 chenyufengweb. All rights reserved.
//#include <stdio.h>typedef int BOOL;
#define true 1
#define false 0int *bubbleSort01(int arr[],int len);
void swap(int *a,int *b);int main(int argc, const char * argv[]) {int array[7] = {150,111,1000,99,300,10,189};/***指针向后移位;*///    int *p = bubbleSort02(array, 7);////    for (int i = 0; i < 7; i++) {//        printf("%d ",*(p+i));//    }/***  能够使用传引用的方式。实现例如以下;这里不须要返回值。直接打印就可以,推荐使用这样的方式,方便;*/bubbleSort01(array, 7);for (int i = 0; i < 7; i++) {printf("%d ",array[i]);}return 0;
}//常规的冒泡。
int *bubbleSort01(int arr[],int len){int temp;for (int i = 0; i < len; i++){for (int j = 1; j < len - i; j++) {if (arr[j - 1] > arr[j]) {//                temp = arr[j - 1];
//                arr[j - 1] = arr[j];
//                arr[j] = temp;//这里也能够使用swap交换函数;swap(&arr[j - 1], &arr[j]);}}}return arr;
}void swap(int *a,int *b){int temp;temp = *a;*a = *b;*b = temp;
}



交换类排序:借助数据元素之间的相互交换进行排序的一种方法。如冒泡排序、高速排序。

插入类排序:将无序的各个元素依次插入到已经有序的线性表中。如直接插入排序、希尔排序。

选择排序:扫描整个线性表,选出最小的元素。将它交换到表的最前面。然后对剩下的继续相同的方法,直到子表为空。如直接选择排序、堆排序。



     说明下,冒泡排序的时间复杂度为O(n^2),空间复杂度为O(1).是一种稳定的排序。



本文參考:http://blog.csdn.net/morewindows/article/details/6657829

转载于:https://www.cnblogs.com/claireyuancy/p/7082226.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/283242.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Mybatis之设计模式之装饰者模式

了解&#xff0c;什么是装饰者模式? 1.定义 装饰模式是在不必改变原类文件和使用继承的情况下&#xff0c;动态地扩展一个对象的功能。它是通过创建一个包装对象&#xff0c;也就是装饰来包裹真实的对象。 2.特点 1 装饰对象和真实对象有相同的接口。这样客户端对象就能以和真…

一天掌握Android JNI本地编程 快速入门

一、JNI&#xff08;Java Native Interface&#xff09; 1、什么是JNI&#xff1a;JNI(Java Native Interface):java本地开发接口JNI是一个协议&#xff0c;这个协议用来沟通java代码和外部的本地代码(c/c) 外部的c/c代码也可以调用java代码2、为什么使用JNI&#xff1a;效率上…

[转]CentOS 7忘记root密码解决办法

转自&#xff1a;http://www.linuxidc.com/Linux/2016-08/134034.htm 亲测可用&#xff01; CentOS 7 root密码的重置方式和CentOS 6完全不一样&#xff0c;CentOS 7与之前的版本6变化还是比较大的&#xff0c;以进入单用户模式修改root密码为例。 1.重启开机按esc 2.按e 3.编…

美链BEC合约漏洞技术分析

这两天币圈链圈被美链BEC智能合约的漏洞导致代币价值几乎归零的事件刷遍朋友圈。这篇文章就来分析下BEC智能合约的漏洞 <!-- more --> 漏洞攻击交易 我们先来还原下攻击交易&#xff0c;这个交易可以在这个链接查询到。我截图给大家看一下&#xff1a; 攻击者向两个账号转…

vue 公众号扫描_vue编写微信公众号打开相机功能

vue编写微信公众号打开相机功能&#xff0c;什么都不多说直接上代码页面布局代码class"previewer-demo-img":key"index":src"item.src"width"100"click"previewImg(index)">1.微信config初始化前端代码initWxConfig() {l…

SQL Server-聚焦NOT IN VS NOT EXISTS VS LEFT JOIN...IS NULL性能分析(十八)

前言 本节我们来综合比较NOT IN VS NOT EXISTS VS LEFT JOIN...IS NULL的性能&#xff0c;简短的内容&#xff0c;深入的理解&#xff0c;Always to review the basics。 NOT IN、NOT EXISTS、LEFT JOIN...IS NULL性能分析 我们首先创建测试表 USE TSQL2012 GOCREATE SCHEMA [c…

global using 的另类用法

前言global using 指令在 C# 10 中被引入&#xff0c;意味着 using 将应用于编译中的所有文件&#xff08;通常是一个项目&#xff09;。比如&#xff1a;global using System.Text;则在同一项目的其他位置&#xff0c;可以直接使用 System.Text 下的所有类型而无需再次声明 us…

利用 Node.js 实现 SAP Hana 数据库编程接口

为什么80%的码农都做不了架构师&#xff1f;>>> 自 SAP HANA SP 11 之后&#xff0c;可以使用 Node.js 作为 Hana 的编程接口。SAP 将 Application server 简称为 XS。现在 XS 已经演化为 Advanced 版本。为了区别&#xff0c;早期的 XS 被称为 XS Classical。 从下…

WPF 实现自绘验证码

WPF 实现自绘验证码控件名&#xff1a;VerifyCode作者&#xff1a;WPFDevelopersOrg原文链接&#xff1a; https://github.com/WPFDevelopersOrg/WPFDevelopers框架使用大于等于.NET40&#xff1b;Visual Studio 2022;项目使用 MIT 开源许可协议&#xff1b;如何通过DrawingV…

css中的单位换算_CSS单位px、em、rem及它们之间的换算关系

作者:WangMin格言:努力做好自己喜欢的每一件事国内的设计师大都喜欢用px&#xff0c;而国外的网站大都喜欢用em和rem&#xff0c;那么三者的区别与优势是什么&#xff1f;接下来我们就来学习一下吧&#xff01;单位px、em、rem分别表示什么&#xff1f;1、 px(Pixel) 相对于显示…

【MAC】Ncnn 编译so文件方案

【MAC】Ncnn 编译so文件方案 1、下载ncnn github地址是&#xff1a;https://github.com/Tencent/ncnn 指定目录&#xff1a;在终端或者git管理工具 输入&#xff1a;git clone https://github.com/Tencent/ncnn.git 2、编译Ncnn 2.1 Mac平台 安装cmake、wget&#xff08;根据实…

SSM学习注意杂记

2019独角兽企业重金招聘Python工程师标准>>> 1.spring导包时一定要版本对应&#xff0c;最好不要导不同版本的包&#xff0c;还有mybatis的包&#xff0c;springmvc的包&#xff0c;三个框架的包都需配套&#xff0c;要不然会出现一些想象不到的错误。 2.mybatis写映…

《ASP.NET Core 6框架揭秘》实例演示[15]:针对控制台的日志输出

针对控制台的ILogger实现类型为ConsoleLogger&#xff0c;对应的ILoggerProvider实现类型为ConsoleLoggerProvider&#xff0c;这两个类型都定义在 NuGet包“Microsoft.Extensions.Logging.Console”中。ConsoleLogger要将一条日志输出到控制台上&#xff0c;首选要解决的是格式…

《HeadFirst Python》第一章学习笔记

对于Python初学者来说&#xff0c;舍得强烈推荐从《HeadFirst Python》开始读起&#xff0c;这本书当真做到了深入浅出&#xff0c;HeadFirst系列&#xff0c;本身亦是品质的保证。这本书舍得已在《Python起步&#xff1a;写给零编程基础的童鞋》一文中提供了下载。为了方便大家…

Oracle-13:Oracle中的表分区

------------吾亦无他,唯手熟尔&#xff0c;谦卑若愚&#xff0c;好学若饥------------- 本篇博客记录了表分区 表分区的含义&#xff1a; 典型的拿空间换时间的案例&#xff01; 表分区对一张表进行分区&#xff0c;分区之后表中的数据存在相对应的分区内&#xff08;可以是不…

js控制图像等比例缩放

<!DOCTYPE html> <html> <head><title>图片内部放大效果</title> <meta charset"utf-8"> <style type"text/css">#imgborder{ width: 200px;height: 160px;border: 3px solid #000; overflow: hidden;position:…

mysql一张表最多多少索引_MySQL一个索引最多有多少个列?真实的测试例子

MySQL一个索引最多有多少个列&#xff1f;真实的测试例子更新时间&#xff1a;2009年07月01日 22:22:21 作者&#xff1a;MySQL一个索引最多有多少个列&#xff1f;下面是具体的实现代码。最多16列。create table test (f1 int,f2 int,f3 int,f4 int,f5 int,f6 int,f7 int,f8…

.NET Core 使用 LibreOffice 实现 Office 预览(Docker 部署)

前些年做云盘产品的时候&#xff0c;一个很核心的功能就是 Office 文件预览&#xff0c;当时还没有使用 .NET Core ,程序部署在 Windows Server 服务器上&#xff0c;文件预览的方案采用了微软的 OWA 。目前在做的零代码产品中的表单附件控件&#xff0c;同样面临着 Office 文件…

[开源精品] C#.NET im 聊天通讯架构设计 -- FreeIM 支持集群、职责分明、高性能

&#x1f4bb; FreeIM 是什么&#xff1f;FreeIM 使用 websocket 协议实现简易、高性能&#xff08;单机支持5万连接&#xff09;、集群即时通讯组件&#xff0c;支持点对点通讯、群聊通讯、上线下线事件消息等众多实用性功能。 ImCore 已正式改名为 FreeIM。使用场景&#xff…

用websploit获取管理员后台地址

1, use web/dir_scanner 2, set TARGET http://www.****.com 3, run SOURCE: https://sourceforge.net/projects/websploit/ WebSploit Advanced MITM Framework[]Autopwn – Used From Metasploit For Scan and Exploit Target Service[]wmap – Scan,Crawler Target Used Fro…