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什么是冒泡排序法? 顾名思 ...

  2. 冒泡排序法和选择排序法比较(从小到大,升序)

    1.冒泡排序法 冒泡法的基本思想为将相邻的两个数进行比较,并且将较大的数赋值给后面的数.(可以看做将较大的数沉底.) 举个例子,现在我们有5个数,即3 ,7,2 , 1, 5.现在我们需要用冒泡法将它 ...

  3. 冒泡排序法和选择排序法

    冒泡排序法(算法):     ①.比较相邻的元素.如果第一个比第二个大,就交换它们两个:     ②.对每一对相邻元素作同样的工作,从开始第一对到结尾的最后一对,这样在最后的元素应该会是最大的数:   ...

  4. 使用策略模式的设计方式来实现对数组的排序,提供两种具体的实施策略,冒泡排序法和选择排序法

    package com.Arrays;public interface ArraysSort {public abstract int[] sort(int [] arr); }package com ...

  5. C语言冒泡法和选择排序法

    C语言冒泡法和选择排序法 1.冒泡法代码 #include<stdio.h> int main() {int a[3];int p,i,tmp;for(i=0;i<3;i++)sca ...

  6. 算法之旅 | 选择排序法

    算法之旅 | 选择排序法 HTML5学堂-码匠:数据快速的计算与排序,与前端页面性能有直接的关系.由于排序的算法有很多,在本次"算法系列"的分享当中,我们先从简单易上手的选择排序法 ...

  7. c语言函数调用排序用插入法,C语言:编写查找和排序函数(二分查找,冒泡排序,选择排序法,插入排序)...

    任务代码: 二分查找数组的一个数字:(函数法) #include int binarySearch(int a[],int len,int key) { int low=0,high=len-1,mi ...

  8. 排序算法的实现。用C语言编程实现冒泡排序、选择排序、插入排序、shell排序、快速排序、堆排序算法、归并排序。利用随机函数产生N个随机整数(10000以上)。

    #include<stdio.h> #include <time.h> #include<stdlib.h> #define N 10000 double T, T ...

  9. c语言数据结构-算法篇之选择排序

    文章目录 前言 一.选择排序是什么? 二.选择排序 代码 前言 排序方法是一种重要的,基本的算法.排序的方法很多,本章就介绍选择排序 一.选择排序是什么? 第一次从R[0]~R[n-1]中选取最小值, ...

最新文章

  1. kali下sqliv:SQL注入URL扫描器
  2. linux命令积累之egrep命令
  3. Linux内存背后的那些神秘往事
  4. 【洛谷 P3304】[SDOI2013]直径(树的直径)
  5. ipcfg报错_ipcplwhl.dll
  6. C/C++文件操作效率比较——FILE/fstream
  7. Javascript 已被弃用的或删除的特性(V客学院知识分享)
  8. FAT文件系统“格式化”的恢复方法
  9. Linux入学—共享文件夹(保姆教程)
  10. 多元函数微分学之偏导数
  11. 输入邮箱判断邮箱是否合法
  12. python3 全局变量_Python3基础 当函数中的局部变量与全局变量同名了,各管各的...
  13. C++各种运行时错误
  14. 虚拟人在虚拟现实中应用的技术思考与研究
  15. AAC编解码原理概述
  16. LINK : fatal error LNK1181: cannot open input file “libcurl.lib“
  17. 如何往数据库快速插入百万条数据
  18. (附源码)springboot网络微小说 毕业设计031758
  19. 如何快速简单的从百度文库中复制长遍文字内容
  20. RFID定位技术在资产管理中的应用,智能化的资产管理-新导智能

热门文章

  1. tampermonkey使用直接获取百度云盘下载地址
  2. 动态效果html wow,WOW.js轻松让网页实现动画效果
  3. 盈利长跑名将却有难言之隐,回港会是唯品会“温柔乡”?
  4. HENAU 冬令营训练赛1(ioi赛制)
  5. 奇点将至——VR产业四大发展趋势
  6. 给自己的hexo博客个性化Volantis主题
  7. python-day31(正式学习)
  8. 3.8、集线器与交换机的区别
  9. IT咨询公司薪酬比较
  10. c语言学生学籍管理,c语言:学生学籍管理系统