吾爱汇编

 找回密码
 立即注册

QQ登录

绑定QQ避免忘记帐号

查看: 3229|回复: 10

[C#] C#中级开发原创教程第一课-冒泡排序算法

[复制链接]
王尼玛 发表于 2014-11-8 04:41 | 显示全部楼层 |阅读模式

本帖最后由 王尼玛 于 2014-11-8 04:41 编辑

大家好,我是王尼玛。今天起我给大家讲解C#中级开发教程,本次是第一课。大家在课后有什么疑问可以跟帖留言,我会尽我所能来解答。毕竟众口难调,大家有什么建议也可以跟帖告诉我。
此教程为本人原创,转载请注明"吾爱汇编论坛王尼玛原创"
好了,废话不多说,开始今天的学习.

有朋友说不太明白我写的教程,其实编程这东西很简单,一个字,练!你光看我写的多半是一头雾水,因为你没实际跟着我讲的代码去操作,你要跟着我的代码敲,多敲代码,多练习我给的例子,再配合我例子后面的讲解,自然就明白我讲的是什么了.还不明白?跟帖问吧

冒泡排序算法

生活中常常会遇到一些排序问题,那么怎么用程序来实现排序呢?这个问题前人早就思考过了,他们总结出了很多种利用程序排序的方法,我们现在就来看看怎样用C#语言实现经典的冒泡排序算法.对于程序员来讲,会编写程序实现冒泡算法就像是中国人会用筷子一样,是一项必备的技能

现在让我们了解冒泡算法的工作原理,现在有五个数字,23,90,9,25,16 使用冒泡排序的过程如下图所示.你能看出排序的规律吗
1.jpg

冒泡排序的过程就像他的名字一样,如果把较小的数比作气泡,排序的过程就是气泡不断向上冒的过程,越小的数冒得越高,从图片可以看出,冒泡排序是从最底层的元素开始,比较它和它上方紧挨着的元素,如果下面的元素小于上面的元素,就交换他们的位置,否则保持原样.然后转移到往上一个位置,重复以上过程,最后,最小的元素移到了顶部.这时再从最底层元素开始比较,重复前面的冒泡过程,就可以将第二小的数放在第二个位置上,如此重复下去,直到所有元素按照上小下大的顺序排列在用程序实现冒泡排序时,可以把图片里的数字放倒,让这些数字从左到右排列:16,25,9,90,23.这样冒泡的过程就变成了从左向右冒泡,可以用一个一维数组来存放这些数字,那么图中相邻两个数字交换就是数组中两个相邻元素进行交换.现在我们就来小试牛刀
问题:
艾边成同学代表中心参加了全国竞赛,进入了全国五强,最后的冠军究竟花落谁家呢?请你使用冒泡排序按成绩的高低对五强进行排名
分析:
要解决这个问题,首先需要一个一维数组来存放成绩,数组的长度为5.然后用冒泡排序将五个人的成绩由高到低进行排序.在排序的过程中要将数组的元素进行交换,所以要设一个临时变量temp,用它来帮助我们完成交换的工作,最后将排序后的成绩输出
解决方案:
  1. class Program
  2.     {
  3.         static void Main(string[] args)
  4.         {
  5.             int[] scores = new int[5];//成绩数组
  6.             int i, j;//循环变量
  7.             int temp;
  8.             Console.WriteLine("请输入5个学员的成绩");
  9.             for(i=0;i<5;i++)
  10.             {
  11.                 Console.WriteLine("请输入第{0}个学员的成绩:",i+1);
  12.                 scores[i] = int.Parse(Console.ReadLine());
  13.             }
  14.             //使用冒泡排序进行排序
  15.             for(i=0;i<scores.Length-1;i++)//控制比较多少轮
  16.             {
  17.                 //将最大的元素交换到最后
  18.                 for(j=0;j<scores.Length-1-i;j++)
  19.                 {
  20.                     if(scores[j]>scores[j+1])
  21.                     {
  22.                         temp = scores[j];
  23.                         scores[j] = scores[j + 1];
  24.                         scores[j + 1] = temp;
  25.                     }
  26.                 }
  27.             }
  28.             //排序后输出
  29.             Console.WriteLine("排序后的成绩为:");
  30.             for(i=0;i<5;i++)
  31.             {
  32.                 Console.WriteLine("{0}\t", scores[i]);
  33.             }
  34.             Console.ReadKey();
  35.         }
  36.     }
复制代码
我们从数组的第一个元素开始,将当前元素同它后面的元素进行比较,每一轮比较都找到一个最大的数交换到数组的尾部,也就是说大的气泡向后冒.外层循环控制比较多少轮,内层循环控制每轮比较多少次.程序的关键是确定内层循环和外层循环变量的初始值和终止条件.我们按照循环过程一起来走一遍,你就会明白内层循环的终止条件为什么是"数组长度-1-i"了

  • 当i=0时,是第一轮比较,数组中所有的元素都参与比较.首先scores[0和scores[1]比较,然后scores[1]和scores[2]比较,之后scores[2]与scores[3]比较,最后scores[3]和scores[4]比较,每次比较都把大的数交换到后面,这样一轮下来最大的数就交换到了scores[4],一共比较了四次
  • 当i=1时,因为scores[4]已经是最大的数了,所以不参与比较,那么就比较到scores[3],一轮下来第二大的数交换到了scores[3],一共比较了三次
  • 当i=2时,scores[3]也不参与比较,只需要比较到scores[2],这轮一共比较2次
  • 当i=3时,scores[2]不参与比较,只需要比较scores[0]和scores[1],一共比较1次

经过这么四轮比较后,所有的元素就从小到大排好序了.你看出规律了吗?外层循环的i从0变到3,也就是说外层循环的条件是i<4,而4就是数组长度-1.当i从0变到3时,内层循环的次数从4变到了1,也就是说j<4-i,所以内层循环的终止条件是:j<数组长度-1-i.如果你还是不理解,没关系,可以利用vs下断点来看看,在内层for循环下一个断点,观察每次循环i和j的变化,你就会一清二楚了
运行结果如下图:
QQ截图20141108041342.png


这节课就到,纯手打很辛苦,对你有帮助请加分好评哦












评分

参与人数 11HB +17 THX +8 收起 理由
29590 + 1
消逝的过去 + 2
zxjzzh + 1 [吾爱汇编论坛52HB.COM]-软件反汇编逆向分析,软件安全必不可少!
agan8888 + 1
ding520 + 1 [吾爱汇编论坛52HB.COM]-软件反汇编逆向分析,软件安全必不可少!
xiaoqiLi + 1
1314aipojie + 1 + 1 ★★★★★ 热心人,佛祖保佑你事事顺利 ,财源滚滚!!!
姨妈没我红 + 1 + 1 前来支持尼玛,我完全不会啊~
虚竹 + 3 + 1 积极评分从我做起,感谢!
zx2cwf + 5 + 1 我很赞同!
PS_URINE + 3 + 1 我很赞同!

查看全部评分

吾爱汇编论坛-学破解,防破解!知进攻,懂防守!逆向分析,软件安全!52HB.COM
PS_URINE 发表于 2014-11-8 08:39 | 显示全部楼层

本帖最后由 PS_URINE 于 2014-11-8 08:40 编辑

本来打算学C++的,还是跟着坛友学C#吧

我没救了,看着代码就用易语言敲了出来

吾爱汇编论坛-学破解,防破解!知进攻,懂防守!逆向分析,软件安全!52HB.COM
zx2cwf 发表于 2014-11-8 09:38 | 显示全部楼层

王哥帅气啊   

还有几种算法也发上来吧  

分配算法  回收算法   哈希表的查找分析

直接插入排序   其它插入排序   希尔排序   

简单选择排序   快速选择排序   堆排序     多关键字排序    链式基数排序

最佳归并树

点评

王尼玛”点评说:
高端啊,有几种我还没听过啊,孤陋寡闻了  详情 回复 发表于 2014-11-8 15:19
吾爱汇编论坛-学破解,防破解!知进攻,懂防守!逆向分析,软件安全!52HB.COM
 楼主| 王尼玛 发表于 2014-11-8 15:19 | 显示全部楼层

本帖最后由 王尼玛 于 2014-11-8 15:29 编辑
LWJ一辈子 发表于 2014-11-8 09:38
王哥帅气啊   

还有几种算法也发上来吧  

我是彩笔,不懂这么高端的东西




点评

zx2cwf”点评说:
王哥 谦虚 谦虚  详情 回复 发表于 2014-11-8 15:40
吾爱汇编论坛-学破解,防破解!知进攻,懂防守!逆向分析,软件安全!52HB.COM
zx2cwf 发表于 2014-11-8 15:40 | 显示全部楼层

王尼玛 发表于 2014-11-8 15:19
我是彩笔,不懂这么高端的东西

王哥 谦虚  谦虚  


吾爱汇编论坛-学破解,防破解!知进攻,懂防守!逆向分析,软件安全!52HB.COM
虚竹 发表于 2014-11-8 18:07 | 显示全部楼层
吾爱汇编论坛-学破解,防破解!知进攻,懂防守!逆向分析,软件安全!52HB.COM
姨妈没我红 发表于 2014-11-9 19:30 | 显示全部楼层

支持支持!~~
吾爱汇编论坛-学破解,防破解!知进攻,懂防守!逆向分析,软件安全!52HB.COM
njjwdy 发表于 2015-5-25 15:54 | 显示全部楼层

支持支持!~~
吾爱汇编论坛-学破解,防破解!知进攻,懂防守!逆向分析,软件安全!52HB.COM
倾诉 发表于 2016-6-11 22:30 | 显示全部楼层

我戳,新手表示,我TM看不懂啊啊啊~!!!!!   话说视频教程好少!!
吾爱汇编论坛-学破解,防破解!知进攻,懂防守!逆向分析,软件安全!52HB.COM
guxihao 发表于 2017-6-13 21:39 | 显示全部楼层

谢谢分享 正在学C#
吾爱汇编论坛-学破解,防破解!知进攻,懂防守!逆向分析,软件安全!52HB.COM
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

警告:本站严惩灌水回复,尊重自己从尊重他人开始!

1层
2层
3层
4层
5层
6层
7层
8层
9层
10层

免责声明

吾爱汇编(www.52hb.com)所讨论的技术及相关工具仅限用于研究学习,皆在提高软件产品的安全性,严禁用于不良动机。任何个人、团体、组织不得将其用于非法目的,否则,一切后果自行承担。吾爱汇编不承担任何因为技术滥用所产生的连带责任。吾爱汇编内容源于网络,版权争议与本站无关。您必须在下载后的24个小时之内,从您的电脑中彻底删除。如有侵权请邮件或微信与我们联系处理。

站长邮箱:SharkHeng@sina.com
站长QQ:1140549900


QQ|RSS|手机版|小黑屋|帮助|吾爱汇编 ( 京公网安备11011502005403号 , 京ICP备20003498号-6 )|网站地图

Powered by Discuz!

吾爱汇编 www.52hb.com

快速回复 返回顶部 返回列表