王尼玛 发表于 2014-11-8 04:41

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

本帖最后由 王尼玛 于 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;//成绩数组
            int i, j;//循环变量
            int temp;
            Console.WriteLine("请输入5个学员的成绩");
            for(i=0;i<5;i++)
            {
                Console.WriteLine("请输入第{0}个学员的成绩:",i+1);
                scores = int.Parse(Console.ReadLine());
            }
            //使用冒泡排序进行排序
            for(i=0;i<scores.Length-1;i++)//控制比较多少轮
            {
                //将最大的元素交换到最后
                for(j=0;j<scores.Length-1-i;j++)
                {
                  if(scores>scores)
                  {
                        temp = scores;
                        scores = scores;
                        scores = temp;
                  }
                }
            }
            //排序后输出
            Console.WriteLine("排序后的成绩为:");
            for(i=0;i<5;i++)
            {
                Console.WriteLine("{0}\t", scores);
            }
            Console.ReadKey();
      }
    }我们从数组的第一个元素开始,将当前元素同它后面的元素进行比较,每一轮比较都找到一个最大的数交换到数组的尾部,也就是说大的气泡向后冒.外层循环控制比较多少轮,内层循环控制每轮比较多少次.程序的关键是确定内层循环和外层循环变量的初始值和终止条件.我们按照循环过程一起来走一遍,你就会明白内层循环的终止条件为什么是"数组长度-1-i"了


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

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



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












PS_URINE 发表于 2014-11-8 08:39

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

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

我没救了,看着代码就用易语言敲了出来{:6_224:}

zx2cwf 发表于 2014-11-8 09:38

王哥帅气啊   

还有几种算法也发上来吧

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

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

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

最佳归并树

王尼玛 发表于 2014-11-8 15:19

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

LWJ一辈子 发表于 2014-11-8 09:38
王哥帅气啊   

还有几种算法也发上来吧

我是彩笔{:5_188:},不懂这么高端的东西




zx2cwf 发表于 2014-11-8 15:40

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

王哥 谦虚谦虚{:5_123:}


虚竹 发表于 2014-11-8 18:07

。我我我,,,看上去好想好厉害的样子!

姨妈没我红 发表于 2014-11-9 19:30

支持支持!~~{:5_117:}

njjwdy 发表于 2015-5-25 15:54

支持支持!~~

倾诉 发表于 2016-6-11 22:30

我戳,新手表示,我TM看不懂啊啊啊~!!!!!   话说视频教程好少!!

guxihao 发表于 2017-6-13 21:39

谢谢分享 正在学C#
页: [1] 2
查看完整版本: C#中级开发原创教程第一课-冒泡排序算法