总结c语言基础算法——冒泡排序法和选择排序法
1.首先无论何种排序方法其最终目的是按要求将所给数据进行排序。而在C语言中可以有很多排序的方法,这里着重介绍的是常用的较为基础和重要的算法——冒泡排序法和选择排序法。
下面将举一个例子进行讲解:
要求:从键盘输出10个整数,要求对它们按照从小到大的顺序排列。
冒泡排序法:
#include<stdio.h>
int main()
{int a[10];int i,j,t;printf("输入10个整数:");for(i=0;i<10;i++) //先对一维数组赋值scanf("%d",&a[i]);for(j=0;j<9;j++) //这一步是进行9次“循环”,实现9趟“比较”for(i=0;i<9-j;i++) //在每一趟中进行9-j次”比较“if(a[i]>a[i+1]) //进行比较,如果前者大于后者,则两者交换{t=a[i];a[i]=a[i+1];a[i+1]=t;}printf("排好顺序的数据为:\n");for(i=0;i<10;i++)printf("%d ",a[i]);return 0;
}
运行结果如下:
输入10个整数:
1 0 4 8 12 6 -45 -67 10 3
排好顺序的数据为:
-67 -45 0 1 3 4 6 8 10 12
--------------------------------
Process exited after 36.37 seconds with return value 0
请按任意键继续. . .
上述代码有几个地方要特别注意:
for(j=0;j<9;j++) //这一步是进行9次“循环”,实现9趟“比较”for(i=0;i<9-j;i++) //在每一趟中进行9-j次”比较“
这一步,因为整体是长度为10的数据,因此 j<9,不能为10。因为10个数两两比较只需要9 趟,即n个数只需进行n-1趟即可。而后面 i<9-j 是保证在每一趟中未排序的数字进行两两比较。每一次的比较结果将较小的数字放在上面,就像冒泡的方式一样,最终实现排序,因此叫做”冒跑排序法“。
选择排序法:
#include<stdio.h>
int main()
{int a[10];int i,j,t,k;printf("输入10个整数:"); //对一维数组进行赋值for(i=0;i<10;i++) scanf("%d",&a[i]);for(i=0;i<9;i++) {k=i; //k在这里只是用来记住数字在数组中的位置for(j=i+1;j<10;j++) //目的是保证将第i个数与其后面的元素比较if(a[j]<a[k]) //如果a[j]<a[k]k=j; //则将最小元素的序号保存到k中if(k!=i) //如果k值有变化{t=a[k]; //则将最小的元素与a[i]对换a[k]=a[i];a[i]=t;} //重新进入下一轮循环,直到外循环结束}printf("排好顺序的数据为:\n");for(i=0;i<10;i++)printf("%d ",a[i]);return 0;
}
运行结果如下:
输入10个整数:
1 0 4 8 12 6 -45 -67 10 3
排好顺序的数据为:
-67 -45 0 1 3 4 6 8 10 12
--------------------------------
Process exited after 3.162 seconds with return value 0
请按任意键继续. . .
需要注意的地方:
for(i=0;i<9;i++) {k=i; //k在这里只是用来记住数字在数组中的位置for(j=i+1;j<10;j++) //目的是保证将第i个数与其后面的元素比较if(a[j]<a[k]) //如果a[j]<a[k]k=j; //则将最小元素的序号保存到k中if(k!=i) //如果k值有变化{t=a[k]; //则将最小的元素与a[i]对换a[k]=a[i];a[i]=t;} //重新进入下一轮循环,直到外循环结束}
选择排序法的关键在于,它的排序机制是只记住每一个数字在原始数组中的序号,同时用k来作为一个媒介,先将一个数字的序号 i 保存在 k 中,让 a[k] 与后面的数字 a[j] 进行比较,要是出现上述的情况,则将最小元素的序号保存到 k 中,此时 k 的值就发生了改变,在通过对 k 是否变化进行判断,若变化则将最小的元素与 a[i] 对换,这样一来就保证了每一轮下来 k 中保存的值永远是最小元素的序号,从而达到排序的目的。
PS:认真的朋友应该发现了,在“冒泡排序法”和“选择排序法”的运算结果中代码处理的时间不一样。为什么?因为在理论上讲“选择排序法”比“冒泡排序法”效率要高,因为冒泡排序法无论相邻数字间是什么大小关系,都要一一进行一次对比,但是选择排序则不同。
总结c语言基础算法——冒泡排序法和选择排序法相关推荐
- 浅谈排序算法:冒泡排序法和选择排序法的区别
之前学习了冒泡排序法和选择排序法,最近被老师问某个道题用的是什么排序法.自己居然答不出来,才发现自己没有真正弄懂,这两个算法的原理和区别,所以····· 1冒泡排序法 1.1什么是冒泡排序法? 顾名思 ...
- 冒泡排序法和选择排序法比较(从小到大,升序)
1.冒泡排序法 冒泡法的基本思想为将相邻的两个数进行比较,并且将较大的数赋值给后面的数.(可以看做将较大的数沉底.) 举个例子,现在我们有5个数,即3 ,7,2 , 1, 5.现在我们需要用冒泡法将它 ...
- 冒泡排序法和选择排序法
冒泡排序法(算法): ①.比较相邻的元素.如果第一个比第二个大,就交换它们两个: ②.对每一对相邻元素作同样的工作,从开始第一对到结尾的最后一对,这样在最后的元素应该会是最大的数: ...
- 使用策略模式的设计方式来实现对数组的排序,提供两种具体的实施策略,冒泡排序法和选择排序法
package com.Arrays;public interface ArraysSort {public abstract int[] sort(int [] arr); }package com ...
- C语言冒泡法和选择排序法
C语言冒泡法和选择排序法 1.冒泡法代码 #include<stdio.h> int main() {int a[3];int p,i,tmp;for(i=0;i<3;i++)sca ...
- 算法之旅 | 选择排序法
算法之旅 | 选择排序法 HTML5学堂-码匠:数据快速的计算与排序,与前端页面性能有直接的关系.由于排序的算法有很多,在本次"算法系列"的分享当中,我们先从简单易上手的选择排序法 ...
- c语言函数调用排序用插入法,C语言:编写查找和排序函数(二分查找,冒泡排序,选择排序法,插入排序)...
任务代码: 二分查找数组的一个数字:(函数法) #include int binarySearch(int a[],int len,int key) { int low=0,high=len-1,mi ...
- 排序算法的实现。用C语言编程实现冒泡排序、选择排序、插入排序、shell排序、快速排序、堆排序算法、归并排序。利用随机函数产生N个随机整数(10000以上)。
#include<stdio.h> #include <time.h> #include<stdlib.h> #define N 10000 double T, T ...
- c语言数据结构-算法篇之选择排序
文章目录 前言 一.选择排序是什么? 二.选择排序 代码 前言 排序方法是一种重要的,基本的算法.排序的方法很多,本章就介绍选择排序 一.选择排序是什么? 第一次从R[0]~R[n-1]中选取最小值, ...
最新文章
- kali下sqliv:SQL注入URL扫描器
- linux命令积累之egrep命令
- Linux内存背后的那些神秘往事
- 【洛谷 P3304】[SDOI2013]直径(树的直径)
- ipcfg报错_ipcplwhl.dll
- C/C++文件操作效率比较——FILE/fstream
- Javascript 已被弃用的或删除的特性(V客学院知识分享)
- FAT文件系统“格式化”的恢复方法
- Linux入学—共享文件夹(保姆教程)
- 多元函数微分学之偏导数
- 输入邮箱判断邮箱是否合法
- python3 全局变量_Python3基础 当函数中的局部变量与全局变量同名了,各管各的...
- C++各种运行时错误
- 虚拟人在虚拟现实中应用的技术思考与研究
- AAC编解码原理概述
- LINK : fatal error LNK1181: cannot open input file “libcurl.lib“
- 如何往数据库快速插入百万条数据
- (附源码)springboot网络微小说 毕业设计031758
- 如何快速简单的从百度文库中复制长遍文字内容
- RFID定位技术在资产管理中的应用,智能化的资产管理-新导智能