C 冒泡排序和选择排序
冒泡排序
理论概念: 从第一个数开始,将相邻的两个数比较,第一个数和第二个数比较,比如说是从小到大的排序,要是后面的数比前面的小则交换两个的位置,这样第一轮比较基数后最大的数就到了最后面,接着进行第二轮的比较,比较到前面N-1个数,原理也是前面的那样,大的往后面不停的排,直到比较到前面只剩下一个数的时候,就完成了排序,这就是冒泡的原理:
第一层循环控制的是我们需要比较多少轮,每比较一轮我们的第二层就少比较一个值,因为最值已经被设置到最前面或者最后面。
第二层循环控制的就是两个相邻的数的比较,但由于前面说的每比较一轮我们的第二层就少比较一个值,所以这个循环控制比较的个数和第一轮是有关系的,这样就好理解for循环边界值的问题。
冒泡排序的代码:
#include "stdio.h"
#define N 10 int main(){ int a[N];
int i,j,t;
printf("请输入您要排序的%d 数字\n",N); /*输入十个数*/
for(i=0;i<N;i++)
scanf("%d",&a[i]);
/*冒泡*/
for(j=0;j<N-1;j++){ for(i=0;i<N-j;i++){ if(a[i] > a[i+1]){ t = a[i];
a[i] = a[i+1];
a[i+1] = t;
}
}
}
printf("排序的结果是:");
for(i=0;i<N;i++){ printf("%d ",a[i]);
}
}
下面是写的过程中出现的错误分析:

选择排序
理论概念:选择排序,就像是打擂台一样,我们先选第一个位置的数为基准位置,后面的一个一个挑战,(比如我们从小到大排序),要是第二个数比第一个数小,则更换值(这时候值换了,但擂主的标记位置还是第一个)再比较第三个,要是比第一个又小,再换,直到一轮比赛结束,找到最小的在前面,接着我们开始第二轮,第二轮以第二个数为基准。后面的还是按照前面的逻辑比较,直到最后一个数,这样就整个排序过程出来了。
第一层循环控制的就是我们设置的擂主的标记,这里只设置一直比较到倒数第二个即可。
第二层就是后面一个个挑战的选手,要是一旦发现符合比较条件的,就交换他们的值,在接着和后面比较。

快速排序的代码:
#include "stdio.h"
#define N 10
int main( ){ int i,j,t,k;
int a[N]; printf("请输入你要排序的%d个整数",N); for(i=0;i<N;i++)
scanf("%d",&a[i]); /*注意这里不能写成N 不然下面的 j 会越界*/
for(i=0;i<N-1;i++){ k=i;
for(j=i+1;j<N;j++){
if(a[k]>a[j]) k=j;
}
if(k!=i){ t= a[i];
a[i] = a[k];
a[k] = t;
}
} printf("最终排序的结果是:");
for(i=0;i<N;i++)
printf("%d ",a[i]);
}
上面就OK,这里没有什么错,最后看一下结果:

C 冒泡排序和选择排序的更多相关文章
- JavaScript算法(冒泡排序、选择排序与插入排序)
冒泡排序.选择排序与插入排序复杂度都是二次方级别的,放在一起说吧. 介绍一些学习这三个排序方法的比较好的资料.冒泡排序看<学习JavaScript数据结构与算法>介绍的冒泡排序,选择排序看 ...
- ObjC语法练习 冒泡排序、选择排序、矩阵相乘
用OC实现的冒泡排序.选择排序.矩阵相乘,纯粹是用来练习语法. 冒泡排序,程序如下: void bubbleSort() { //初始化数组 NSMutableArray *array1 = [[NS ...
- Java版冒泡排序和选择排序
一.理解说明 1.理解和记忆 冒泡排序:依次定位数组元素,每次只和相邻的且符合条件的元素交换位置. 选择排序:依次在数组的每个位置,通过逐个对比选择出最大或最小的元素. 2.知识点说明 (1)数组是引 ...
- 冒泡排序和选择排序(Go语言实现)
冒泡排序和选择排序是排序算法中比较简单和容易实现的算法.冒泡排序的思想为:每一次排序过程,通过相邻元素的交换,将当前没有排好序中的最大(小)移到数组的最右(左)端.而选择排序的思想也很直观:每一次排序 ...
- Java数据结构和算法总结-冒泡排序、选择排序、插入排序算法分析
前言:排序在算法中的地位自然不必多说,在许多工作中都用到了排序,就像学生成绩统计名次.商城商品销量排名.新闻的搜索热度排名等等.也正因为排序的应用范围如此之广,引起了许多人深入研究它的兴趣,直至今天, ...
- Java排序算法分析与实现:快排、冒泡排序、选择排序、插入排序、归并排序(二)
一.概述: 上篇博客介绍了常见简单算法:冒泡排序.选择排序和插入排序.本文介绍高级排序算法:快速排序和归并排序.在开始介绍算法之前,首先介绍高级算法所需要的基础知识:划分.递归,并顺带介绍二分查找算法 ...
- [Java算法] -- 1. 常用排序之冒泡排序和选择排序
使用Java语言实现冒泡排序和选择排序 推荐一个数据结构可视化的网站:http://zh.visualgo.net/zh (暂时访问不了) 对排序不太熟悉的朋友,建议去上面的网站学习一下,你将会发现一 ...
- js中常见的数组排序算法-冒泡排序和选择排序
reverse( ) 数组逆序 // reverse() 数组逆序 var arr = ["边境牧羊犬", "德国牧羊犬", "金毛" ...
- 冒泡排序与选择排序(经典版)----java基础总结
前言:关于冒泡排序和选择排序,每次写的时候都要再看看他们的概念,这次,就自己写明白 1.冒泡排序: 其实冒泡排序应该用例子证明,设数组长度为N. 1.比较相邻的前后二个数据,如果前面数据大于后面的数据 ...
- java面向对象的冒泡排序,选择排序和插入排序的比较
这三种排序有俩个过程: 1.比较俩个数据. 2.交换俩个数据或复制其中一项. 这三种排序的时间级别 冒泡排序:比较 (N-1)+(N-2)+...+2+1 = N*(N-1)/2=N2/2 交换 0 ...
随机推荐
- w3cschool-Scala 教程
https://www.w3cschool.cn/scala/ Scala 教程关于基础基础知识(续)Finagle 介绍集合Searchbird模式匹配与函数组合类型和多态基础高级类型简单构建工具更 ...
- springboot集成测试最小化依赖实践
目录 简介 版本及依赖引入 springboot版本 项目部分依赖 直接使用SpringBootTest方式 代码示例 场景及优劣 最小化依赖方案 代码 思路及步骤 最小化依赖方案的优点 结论 简介 ...
- shell 条件语句基础练习
#输出1到15数字 #!/bin/bash for i in `seq 1 15` do echo -e "\033[32m$i\033[0m" done #计算1到100数字之和 ...
- .NET最佳实践:业务逻辑减少使用异常
在 .NET 开发中,异常处理是保证应用健壮性的重要手段,但不应被滥用. 异常的引发和捕获相较于普通的代码逻辑性能较差,因此在热路径(频繁执行的代码路径)中,避免依赖异常来控制程序流是提升性能的关键之 ...
- 快速配置Azure DevOps代理服务器
快速配置Azure DevOps代理服务器(CentOS 7) Azure DevOps非常好用,但是代理服务器的配置相对有点麻烦而且易出问题,接下来笔者分享一下如何快速配置Azure DevOps的 ...
- day:2 软件测试流程——H模型
软件测试流程_H 模型 一.详细流程 1.产品召开需求澄清会议,产品.开发.测试都参加 2.测试和开发拿到需求 3.测试经理拿到需求,根据需求编写测试计划 测试计划(内容:测试目的,背景,范围,测试准 ...
- 清华大学推出第四讲使用 DeepSeek + DeepResearch 让科研像聊天一样简单!
前言 清华大学推出第四讲使用 DeepSeek + DeepResearch 让科研像聊天一样简单.该份教程旨在通过AI技术重构传统科研模式,提升研究效率与智能化水平. DeepSeek访问地址:ht ...
- Halcon学习教程(二) 测量量测相关(点到线距离,线到线距离,轮廓线距离,一维测量,圆形测量,矩形测量等)
原文作者:aircraft 原文地址:https://www.cnblogs.com/DOMLX/p/18740576 本篇讲一些测量用到的算子和实例,想了解更多就得去看看halcon实例里一维测量里 ...
- 手把手教你用 MicroPython 玩转幻尔串口舵机,代码+教程全公开
原文链接: FreakStudio的博客 摘要 信号发生扩展板通过SPI接口生成可调频率和幅度的正弦波.方波和三角波,频率小于1MHz.支持幅度调节,提供原始和6倍放大输出接口.配备5阶低通滤波器.噪 ...
- 读论文-序列感知推荐系统(Sequence-Aware Recommender Systems)
前言 今天读的论文为一篇于2018年发表在(ACM computing surveys (CSUR))的论文,这篇文章主要讲述了序列感知推荐系统(Sequence-Aware Recommender ...