c语言:简单排序:冒泡排序法、选择排序法、插入排序法(待写)
1.冒泡排序法:
假设有n个数需要按从小到大排序,冒泡排序的原理是,在这一排数字中,将第一个数与第二个数比较大小,如果后面的比前面的小,就将他们交换位置.然后再比较第二个和第三个,再交换,直到第n-1个和第n个,此时第n个就是这n个数中最大,然后再重新找第二大的放在第n-1的位置...
在c编程中是通过两个嵌套的循环,内循环控制比较时的下标(从0到放最大的数的下标之前),外循环控制总的次数(放最大的数的下标到1),以及内循环的比较次数,其中要注意的是总的剩余的次数等于该次外循环中内循环的初始比较次数,外循环的初始次数为n-1,因为要排n个数,只需要弄好n-1个数的位置就好了,内循环的初始次数和外循环一样,因为n个数,按顺序拿一个数与后面的数比较大小,最后那个数后面没有和他比较的,所以也是n-1次.和外循环次数相同.
#include <stdio.h> void main()
{
int a[10] = { 5,1,6,9,8,3,4,6,10,7 };
int temp = 0;
for (int j = 9; j>0; j--)
{
for(int i=0;i<j;i++)
{
if (a[i]>a[i+1])
{
temp = a[i];
a[i] = a[i+1];
a[i + 1] = temp;
}
}
}
for (int i = 0; i<10; i++)
printf("%d ", a[i]);
}
2.选择排序法
假设有n个数需要按从小到大排序,选择排序法的原理是:选择排序在我看来只是冒泡循环的优化方法,思路是在这n个数中先找到最大的数,并记录其下标,然后将最大的数与第n个数交换值(如果正好第n个数是最大的就不用交换了),然后再在剩下的n-1个数中,找最大的数,和第n-1个数交换值...以此类推,和冒泡排序不同的是,每一次的内循环中不会不断的交换值来浪费时间,内循环只是判断寻找最大值的下标,执行一次外循环才有可能有复制交换值的动作,所以大大减少了复杂度.注意:选择排序中内循环的变量范围与冒泡排序不同,冒泡排序因为有[i+1],是选相邻的两个比较,也就是从0比到n-1,而选择排序是假定第0个元素是最大的,碰到比他大的就更新maxindex,也就是从1比到n.但总次数是相同的.
选择最大值的思路是,假定第0个元素是最大的,如果碰到比它大的就更新maxindex.注意:每次内循环之前,别忘了将maxindex归零.
#include <stdio.h>
void main()
{
int a[10] = { 5,1,6,9,8,3,4,6,10,7 };
int maxindex = 0, temp;
for (int j = 9; j > 0; j--)
{
maxindex = 0;
for (int i = 1; i <= j; i++)
{
if (a[maxindex] < a[i])
{
maxindex = i;
}
}
if (maxindex!=j)
{
temp = a[maxindex];
a[maxindex] = a[j];
a[j] = temp;
}
}
for (int i = 0; i<10; i++)
printf("%d ", a[i]);
}
3.插入排序法
c语言:简单排序:冒泡排序法、选择排序法、插入排序法(待写)的更多相关文章
- C语音中最简单的排序冒泡排序和选择排序代码实现(非指针)
#include<stdio.h> int main() { int a[5] = { 2,5,7,3,-1 }; int n = sizeof(a) / sizeof(a[0]);//元 ...
- Java数据结构和算法总结-冒泡排序、选择排序、插入排序算法分析
前言:排序在算法中的地位自然不必多说,在许多工作中都用到了排序,就像学生成绩统计名次.商城商品销量排名.新闻的搜索热度排名等等.也正因为排序的应用范围如此之广,引起了许多人深入研究它的兴趣,直至今天, ...
- C语言排序算法之简单交换法排序,直接选择排序,冒泡排序
C语言排序算法之简单交换法排序,直接选择排序,冒泡排序,最近考试要用到,网上也有很多例子,我觉得还是自己写的看得懂一些. 简单交换法排序 /*简单交换法排序 根据序列中两个记录键值的比较结果来对换这两 ...
- 冒泡排序和选择排序(Go语言实现)
冒泡排序和选择排序是排序算法中比较简单和容易实现的算法.冒泡排序的思想为:每一次排序过程,通过相邻元素的交换,将当前没有排好序中的最大(小)移到数组的最右(左)端.而选择排序的思想也很直观:每一次排序 ...
- php排序介绍_冒泡排序_选择排序法_插入排序法_快速排序法
这里我们介绍一些常用的排序方法,排序是一个程序员的基本功,所谓排序就是对一组数据,按照某个顺序排列的过程. 充效率看 冒泡排序法<选择排序法<插入排序法 排序分两大类: 内部排序法 交换式 ...
- Java 快速排序法 冒泡排序法 选择排序法 插入排序法
1.快速排序的原理: 选择一个关键值作为基准值.比基准值小的都在左边序列(一般是无序的),比基准值大的都在右边(一般是无序的). 从后往前比较,用基准值和最后一个值比较,如果比基准值小的交换位置,如果 ...
- python中对列表元素大小排序(冒泡排序法和选择排序法)
前言:排序(Sorting) 是计算机程序设计中的一种重要操作,它的功能是将一个数据元素(或记录)的任意序列,重新排列成一个关键字有序的序列.本文主要讲述python中经常用的两种排序算法,选择排序法 ...
- C语言之冒泡排序、选择排序、折半查询、进制查表
菜单导航 1.冒泡排序 2.选择排序 3.折半查询 4.进制查表(十进制转二进制.八进制.十六进制) 一.冒泡排序 //1.冒泡排序 /** 一组无序数字,进行从小到大排序 冒泡排序的过程:就是每个循 ...
- C语言数组排序——冒泡排序、选择排序、插入排序
一.冒泡排序 原理解析:(以从小到大排序为例)在一排数字中,将第一个与第二个比较大小,如果后面的数比前面的小,则交换他们的位置. 然后比较第二.第三个……直到比较第n-1个和第n个,此时,每一次比较都 ...
- 牛客网Java刷题知识点之插入排序(直接插入排序和希尔排序)、选择排序(直接选择排序和堆排序)、冒泡排序、快速排序、归并排序和基数排序(博主推荐)
不多说,直接上干货! 插入排序包括直接插入排序.希尔排序. 1.直接插入排序: 如何写成代码: 首先设定插入次数,即循环次数,for(int i=1;i<length;i++),1个数的那次不用 ...
随机推荐
- Debian 中文环境设置
编辑 /etc/apt/sources.list 添加163镜像源 apt-get update 进行更新 dpkg-reconfigure locales 选择 en_US.utf-8 utf-8 ...
- mybatis入门--#{}和${}的区别
我们知道,在mybatis中,sql语句是需要我们自己写的.跟在普通的sql不一样的是,我们在使用mybatis框架的时候,使用的占位符不是 ? 而是 #{} 有时候还会出现这个符号 ${} 这些符号 ...
- Luogu 2279 [HNOI2003]消防局的设立 - 贪心
Description 给定一棵树形图, 建若干个消防站, 消防站能够覆盖到距离不超过2的点, 求最少需要建几个消防站才能覆盖所有点 Solution 从深度最深的点开始, 在它的爷爷节点上建, 每建 ...
- BZOJ 1977[BeiJing2010组队]次小生成树 Tree - 生成树
描述: 就是求一个次小生成树的边权和 传送门 题解 我们先构造一个最小生成树, 把树上的边记录下来. 然后再枚举每条非树边(u, v, val),在树上找出u 到v 路径上的最小边$g_0$ 和 严格 ...
- String类为什么设计成不可变的
在Java中将String设计成不可变的是综合考虑到各种因素的结果,需要综合考虑内存.同步.数据结构以安全方面的考虑. String被设计成不可变的主要目的是为了安全和高效. 1)字符串常量池的需要 ...
- 部署描述符(web.xml)和标注(annotation)
部署描述符(web.xml) 详细信息可在http://www.oracle.com/webfolder/technetwork/jsc/xml/ns/javaee/index.html上下载web- ...
- There are stopped jobs
问题背景 系统:ubuntu,当输入exit退出shell时,出现There are stopped jobs 无法退出shell 解决办法 找到这个stopped job然后终止它 jobs 或者 ...
- @1-2初识Python爬虫
初识Python爬虫 Python爬虫(入门+进阶) DC学院 环境搭建: Python2与Python3的差异:python2与python3整体差异不大,大多是一些语法上的区别,考虑到py ...
- 用 Python 写 Robot Framework 测试
Robot Framework 框架是基于 Python 语言开发的,所以,它本质上是 Python 的一个库. 1.你懂 Python 语言. 2.又想使用 Robot Framework 测试框架 ...
- nginx设置代理配置
server { listen 8086; resolver 8.8.8.8; location /{ ...