动态网站制作指南 [  QQ表情  ]
[ 投票调查 ]
[ 企业邮箱 ]
[ 网站空间 ]
网络编程 | 站长之家 | 网页制作 | 图形图象 | 操作系统 | 冲浪宝典 | 软件教学 | 网络办公 | 邮件系统 | 网络安全 | 认证考试 | 系统进程
ASP源码 | .Net源码 | PHP源码 | JSP源码 | JAVA源码 | CGI源码 | VB源码 | C++源码 | Delphi源码 | PB源码 | VF源码 | 汇编 | 服务器
Firefox | IE | Maxthon | 迅雷 | 电驴 | BitComet | FlashGet | QQ | QQ空间 | Vista | 输入法 | Ghost | Word | Excel | wps | Powerpoint
asp | .net | php | jsp | Sql | c# | Ajax | xml | Dreamweaver | FrontPages | Javascript | css | photoshop | fireworks | Flash | Cad | Discuz!
当前位置 > 网站建设学院 > 网络编程 > C/C++教程
Tag:注入,存储过程,分页,安全,优化,xmlhttp,fso,jmail,application,session,防盗链,stream,无组件,组件,md5,乱码,缓存,加密,验证码,算法,cookies,ubb,正则表达式,水印,索引,日志,压缩,base64,url重写,上传,控件,Web.config,JDBC,函数,内存,PDF,迁移,结构,破解,编译,配置,进程,分词,IIS,Apache,Tomcat,phpmyadmin,Gzip,触发器,socket
网络编程:ASP教程,ASP.NET教程,PHP教程,JSP教程,C#教程,数据库,XML教程,Ajax,Java,Perl,Shell,VB教程,Delphi,C/C++教程,软件工程,J2EE/J2ME,移动开发
文章搜索服务
邮件订阅
输入你的邮件地址,
你将不会错过任何关于:
[ C/C++教程 ]的信息

本月文章推荐
.Windows Sockets:从套接字类派生.
.写好C程序的秘籍(强!).
.C++代码优化方法总结(1).
.lzw压缩算法的c语言实现.
.在VBA中调用AUTOCAD打印文件.
.不同的CPU下最佳编译参数.
.2000年9月基础知识知识和C语言程.
.C++ Builder 初学问与答(五).
.C语言嵌入式系统编程修炼之内存操.
.在C语言中引入类的概念.
.关于中缀表达转后缀表达一题我的.
.奇技淫巧C++之懒惰计算.
.C++程序设计从零开始之语句.
.C语言嵌入式系统编程修炼之屏幕操.
.如何检测Sniffer.
.又一个弹球游戏.
.C语言初学者的困惑--如何由dos向.
.C++箴言:理解typename的两个含义.
.Visual C++ 实现数字化.
.如何在C/C++中调用Java.

C语言常用的三种排序方法总结与探讨

发表日期:2008-3-8 |


C语言常用的三种排序方法总结与探讨   排序是程序设计中非常重要的内容,它的功能是将一组无序的的数据,排列成有序的数据序列,经过排列后的数据,要么是从大到小排列,要么是从小到大排列。一般也只有这两种情况。     例如我们统计班级学生的成绩,那么一般是按照学号来进行统计,原来成绩是无序排列的,这样的话非常不适合于我们对成绩的查询,那么一般我们进行成绩查询之前,先进行排序,如按照高分到低分的排序,这样可以很快地查出本班的最高分和最低分,和成绩比较靠前或靠后的学生。 排序有很多种方法,常用的有三种:冒泡排序、选择排序、插入排序等,下面我们就对这三种方法做一下分析和比较,以便大家能够更好的理解和应用。 一、冒泡排序     1、冒泡排序的基本思想:对于n个数进行排序(现假定是从大到小排序,以下均按此进行),将相邻两个数依次比较,将大数调在前头:也就是说第一个数和第二个数比较,大数放前,小数放后,第二个和第三个进行比较,大数放前、小数放后,然后依次类推。。。经过第一轮比较以后,我们找到一个最小数在最下面(沉底)。然后进行下一轮比较,最后一个数就不用再参加比较了,所以本轮就可以少比较一次。 很显然,需要用双重循环来设计这个问题,外层循环控制进行的轮数,内层循环控制每轮比较的次数,那么到底需要多少轮、每轮需要多少次,我们通过一个实例看一下: 2、排序过程举例: 外循环 1轮 2轮 3轮 4轮 内循环 5个数比较4次 4个数比较3次 3个数比较2次 2个数比较1次 7 5 8 6 9   1次 2次 3次 4次
1次 2次 3次 1 次 2次 1次 7 5 8 6 9 7 8 5 6 9 7 8 6 5 9 7 8 6 9 5 8 7 6 9 5 8 7 6 9 5 8 7 9 6 5 8 7 9 6
5 8 9 7 6 5 9 8 7 6 5   最小的数5沉底,其余4个数继续比较 次小数6沉底,其余3个数 7沉底,其余2个数比较 最后两个数一次比较 那么通过这个排序过程,我们了解了怎样去进行排序,那么到底谁是气泡呢,我们可以从中找出答案,那么从大到小进行排序,较大的一些数就是气泡。随着排序的进行,气泡逐步上升。     从这个排序过种中,还可以看出,5个数实际经过4轮就可以了,实践证实,n个数最多需要n-1轮排序就可以了。     3、冒泡排序的程序如下: for(i=0;i<10;i++) for(j=0;j<10-i;j++)      if(a[j]<a[j+1])    在此程序段的上面加上输入部分和在程序段加上排序后的输出。 程序的改进:    4、算法的改进: 从上面的排序的过程可以看出,假如一个已经排好序的一组数或者经过很少的轮数就可以排完这些数,但是循环还是要继续进行,这样设计出的程序浪费了大量的时间,所以对一这个算法我们可以重新设计。   经过修改后的程如下: for(i=0;i<10&&!swap;i++) { swap=1; for(j=0;j<10-I;j++)      if(a[j]<a[j+1])       
} 二、选择排序     1、排序的基本思想:先从第一个数开始起,用第一个数和其它的数进行比较,假如比第一个数大就交换位置,否则不进行交换,这样经过第一轮比较我们就能够找出最大值放在第一位置,然后从第二个位置起再找次大数,这样依次下去,就可以进行整个数的排序,实践证实,n个数最多需要n-1轮排序就可以了。         2、排序过程举例: 外循环 1轮 2轮 3轮 4轮 内循环 5个数比较4次 4个数比较3次 3个数比较2次 2个数比较1次 7 5 8 6 9   1次 2次 3次 4次 1次 2次 3次 1 次 2次 1次 7 5 8 6 9 8 5 7 6 9 8 5
7 6 9 9 5 7 6 8 9 7 5 6 8 9 7 5 6 8 9 8 5 6 7 9 8 6 5 7 9 8 7 6 5 9 8 7 6 5   最大的数9找到,其余4个数找次大数 次大数8找到,其余3个数找 7找到,其余2个数找 最后两个数一次比较 选择排序较冒泡轻易理解,程序编写也要相对轻易一些。
for(i=0;i<10;i++) for(j=i+1;j<10;j++)      if(a[i]<a[j])    对于选择排序,我们也可以看到一个问题,如第一轮排序中,我们要找的是9才是最大值,所以其它的交换完全没有必要进行,其它各轮都存在这样的情况,所以我们可以想办法取消这种情况,也就是说我们真正找到的最大值的位置后再进行交换。 for(i=0;i<10;i++) {  p=i; for(j=i+1;j<10;j++)      if(a[p]<a[j])        p=j;     if(p!=i) } 这样算法经过改进以后就较好地解决了这个问题。 三、插入排序 1、插入排序基本思想:(假定从大到小排序)依次从后面拿一个数和前面已经排好序的数进行比较,比较的过程是从已经排好序的数中最后一个数开始比较,假如比这个数,继续往前面比较,直到找到比它大的数,然后就放在它的后面,假如一直没有找到,肯定这个数已经比较到了第一个数,那就放到第一个数的前面。 那么一般情况下,对于采用插入排序法去排序的一组数,可以先选 取第一个数做为已经排好序的一组数。然后把第二个放到正确位置 2、程序的编写如下: for(i=1;i<10;i++)//i从0开始或者1开始都可以。其它不变。 for(j=i;j>0;j--)      if(a[j]<a[j-1])    对于这个程序也有需要修该的地方,以上程序的排序实际上也是基于交换思想进行排序,也可以进行真正意义上的排序,即:先把待排序的数取出来,然后找出应该插入的位置,找到后,将待插入位置后的数据统统后移,原待排数据已经取出放于临时变量中。然后把这个数据插入到正确的空余位置就可以了。 那么对于基于交换的插入排序,没有找到位置之前,也进行了交换,所以我们也可以进行程序的改进。那么此程序的改进,肯定不能进行减少交换次数,因为我们知道假如到找到位置再进行交换,那么肯定已经找乱了原来的排序结果,所以只能是找位置,腾位置、放元素这几道手续。 main() { int i,j,t,a[]=;    for(i=1;i<10;i++)
   {t=a[i];
上一篇:C语言程序设计(第6章 指针)01 人气:445
下一篇:More effective C++:审慎使用异常规格 人气:307
浏览全部C/C++的内容 Dreamweaver插件下载 常用网页广告代码全集
  最新网站源码 最新软件下载
2008-10-12 team论坛 v2.0.4 bulid 080916 A
2008-10-12 Roclog v3.1.6
2008-10-12 SupeV v1.0.1 简体中文 GBK
2008-10-12 NetCMS v1.6.0.1010 正式版
2008-10-12 PHP考试系统PPFrame v1.2.7
2008-10-12 LPAS个人相册 v1.6.3
2008-10-12 快问仿百度知道系统 动态-静态-互
2008-10-12 方卡广告防点击系统 V1.0 GB2312
2008-10-12 泡菜内容管理系统[PCMS] v1.0 Bu
2008-10-11 联系人分组工具 v1.1 中文破解版
2008-10-11 FaceMelter变脸 v2.0 汉化破解版
2008-10-11 PathTracker道路跟踪仪 v1.2 破解
2008-10-11 Rooms手机聊天室 v0.6.7 破解版
2008-10-11 RemoteDesktop远程桌面 v1.0 破解
2008-10-11 ProRemote远程调音台 v1.0.1 破解
2008-10-11 PicShare照片共享 v1.0.0 破解版
2008-10-11 Photogene照片编辑器 v1.5 汉化破
2008-10-11 WriteRoom共享文档 v1.0 破解版
  发表评论
姓 名: 验证码:
内 容:
站长工具:网站收录查询 | Google PR查询 | ALEXA排名查询 | CSS在线编辑器 | 广告代码 | js/vbs加密 | md5加密 | 进制转换 | UTF-8 转换工具 | Html转换js | Html转换asp | Html转换php | Html转换perl
实用工具:汉字翻译拼音 | 拼音字典 | 符号对照表 | 个税计算 | 实时汇率查询换算 | 经典小工具 | 汉字简繁转换 | 普通单位换算 | 公制单位换算 | 生辰老黄历 | 国内电话区号 | 国家代码与域名缩写 | 文字加密解密 | 健康查询 | 万年历 | 汉字横竖排版 | 手机号码查询 | 计算器 | ip搜索
业务联系 | 广告刊登 | 频道合作 | 投稿荐稿 | 联系方式 | 加入收藏 | RSS订阅
Copyright © 2000-2008 www.knowsky.com All rights reserved | 网络实名:动态网站制作指南 | 沪ICP备05001343号
ホームページ制作 不動産検索システム 求人情報
防水工事·改修工事 フットサル大会 探偵
SEO対策 中国語教室 ホームページ作成