|
本帖最后由 王尼玛 于 2014-11-8 04:41 编辑
大家好,我是王尼玛。今天起我给大家讲解C#中级开发教程,本次是第一课。大家在课后有什么疑问可以跟帖留言,我会尽我所能来解答。毕竟众口难调,大家有什么建议也可以跟帖告诉我。
此教程为本人原创,转载请注明"吾爱汇编论坛王尼玛原创"
好了,废话不多说,开始今天的学习.
有朋友说不太明白我写的教程,其实编程这东西很简单,一个字,练!你光看我写的多半是一头雾水,因为你没实际跟着我讲的代码去操作,你要跟着我的代码敲,多敲代码,多练习我给的例子,再配合我例子后面的讲解,自然就明白我讲的是什么了.还不明白?跟帖问吧
冒泡排序算法
生活中常常会遇到一些排序问题,那么怎么用程序来实现排序呢?这个问题前人早就思考过了,他们总结出了很多种利用程序排序的方法,我们现在就来看看怎样用C#语言实现经典的冒泡排序算法.对于程序员来讲,会编写程序实现冒泡算法就像是中国人会用筷子一样,是一项必备的技能
现在让我们了解冒泡算法的工作原理,现在有五个数字,23,90,9,25,16 使用冒泡排序的过程如下图所示.你能看出排序的规律吗
冒泡排序的过程就像他的名字一样,如果把较小的数比作气泡,排序的过程就是气泡不断向上冒的过程,越小的数冒得越高,从图片可以看出,冒泡排序是从最底层的元素开始,比较它和它上方紧挨着的元素,如果下面的元素小于上面的元素,就交换他们的位置,否则保持原样.然后转移到往上一个位置,重复以上过程,最后,最小的元素移到了顶部.这时再从最底层元素开始比较,重复前面的冒泡过程,就可以将第二小的数放在第二个位置上,如此重复下去,直到所有元素按照上小下大的顺序排列在用程序实现冒泡排序时,可以把图片里的数字放倒,让这些数字从左到右排列:16,25,9,90,23.这样冒泡的过程就变成了从左向右冒泡,可以用一个一维数组来存放这些数字,那么图中相邻两个数字交换就是数组中两个相邻元素进行交换.现在我们就来小试牛刀
问题:
艾边成同学代表中心参加了全国竞赛,进入了全国五强,最后的冠军究竟花落谁家呢?请你使用冒泡排序按成绩的高低对五强进行排名
分析:
要解决这个问题,首先需要一个一维数组来存放成绩,数组的长度为5.然后用冒泡排序将五个人的成绩由高到低进行排序.在排序的过程中要将数组的元素进行交换,所以要设一个临时变量temp,用它来帮助我们完成交换的工作,最后将排序后的成绩输出
解决方案:- class Program
- {
- static void Main(string[] args)
- {
- int[] scores = new int[5];//成绩数组
- int i, j;//循环变量
- int temp;
- Console.WriteLine("请输入5个学员的成绩");
- for(i=0;i<5;i++)
- {
- Console.WriteLine("请输入第{0}个学员的成绩:",i+1);
- scores[i] = int.Parse(Console.ReadLine());
- }
- //使用冒泡排序进行排序
- for(i=0;i<scores.Length-1;i++)//控制比较多少轮
- {
- //将最大的元素交换到最后
- for(j=0;j<scores.Length-1-i;j++)
- {
- if(scores[j]>scores[j+1])
- {
- temp = scores[j];
- scores[j] = scores[j + 1];
- scores[j + 1] = temp;
- }
- }
- }
- //排序后输出
- Console.WriteLine("排序后的成绩为:");
- for(i=0;i<5;i++)
- {
- Console.WriteLine("{0}\t", scores[i]);
- }
- Console.ReadKey();
- }
- }
复制代码 我们从数组的第一个元素开始,将当前元素同它后面的元素进行比较,每一轮比较都找到一个最大的数交换到数组的尾部,也就是说大的气泡向后冒.外层循环控制比较多少轮,内层循环控制每轮比较多少次.程序的关键是确定内层循环和外层循环变量的初始值和终止条件.我们按照循环过程一起来走一遍,你就会明白内层循环的终止条件为什么是"数组长度-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的变化,你就会一清二楚了
运行结果如下图:
这节课就到,纯手打很辛苦,对你有帮助请加分好评哦
|
评分
-
参与人数 11 | HB +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 |
我很赞同! |
查看全部评分
|