黑马训练营—冒泡排序法的完整介绍

来源:互联网 发布:开源 学校网站 php 编辑:程序博客网 时间:2024/06/05 10:23
 

---------------------- Windows Phone 7手机开发、.Net培训、期待与您交流! ----------------------

冒泡排序法的完整介绍

今天我学到排序方法,虽然只学习了一种排序方法,但是通过百度大神,还是知道好几种的排序方法,下面给大家介绍下冒泡排序的解释。

冒泡排序(冒泡排序将就的是数组中的元素两两比较)

实例:假设有一种极端的数组 {10,20,30,40,50}(这个数组6个元素,位置从0开始,第0位 是10,第1位 是20 … 第4位是50) 要给排序成{50,,40,30,20,10}的样式。

在上面的实例中,

第一趟:

第一次:就是第0位于第1位比较,如果第0位<第1位,则第0位于第1位

上的元素互换,此时,第0位的元素是20,第1位的元素是10,。

显示位置为:{20,10,30,40,50}.

第二次:因为第0位于第1位已经比较完成了,所以此时是第1位 于 第2位的元素比较,如果小于第2位的元素,则于第2位的元素互换。

显示位置为:{20,30,10,40,50}

第三次:同理可得,比较完成时。

显示结果为:{20,30,40,10,50}

第四次:同理可得,比较完成时。

显示结果为:{20,30,40,50,10}

此时,第一趟比较结束时,数组中的元素位置已经发生变化“{20,30,40,50,10}”,原来在第0位上的元素10 已经到了最后一位。但是我们只是把原来第0位的元素排到最后,所以我们还要进行第二趟的比较。

  第二趟:

第一次:就是第0位于第1位比较,如果第0位<第1位,则第0位于第1位

上的元素互换,此时,第0位的元素是20,第1位的元素是30,。

显示位置为:{30,20,40,50,10}.

第二次:因为第0位于第1位已经比较完成了,所以此时是第1位 于 第2位的元素比较,如果小于第2位的元素,则于第2位的元素互换。

显示位置为:{30,40,20,50,10}

第三次:同理可得,比较完成时。

显示结果为:{30,40,50,20,10}

第四次:因为在第一趟就比较20 于10 的值,所以这里比较我们可以省略。

此时,第二趟比较结束时,数组中的元素位置已经发生变化“{30,40,50,20,10}”,原来在第一趟比较结束时,第0位上的元素20 已经到了倒数第二位。但是我只是把原来第0位的元素排到倒数第二位,所以我们还要进行第三趟的比较。

  第三趟:

第一次:就是第0位于第1位比较,如果第0位<第1位,则第0位于第1位

上的元素互换,此时,第0位的元素是20,第1位的元素是30,。

显示位置为:{40,30,50,20,10}.

第二次:因为第0位于第1位已经比较完成了,所以此时是第1位 于 第2位的元素比较,如果小于第2位的元素,则于第2位的元素互换。

显示位置为:{40,50,30,20,10}

第三次:因为在第一趟就比较30 于20 的值,所以这里比较我们可以省略。

第四次:因为在第一趟就比较30 于10 的值,所以这里比较我们可以省略。

(实际上我们是有需要比较的,但是我们知道前面我们就比较过了,所以我们就省略了。)

此时,第三趟比较结束时,数组中的元素位置已经发生变化“{40,50,30,20,10}”,原来在第二趟比较结束时,第0位上的元素30 已经到了倒数第三位。但是我们只是把原来第0位的元素排到倒数第三位,所以我们还要进行第四趟的比较。

  第四趟:

第一次:就是第0位于第1位比较,如果第0位<第1位,则第0位于第1位

上的元素互换,此时,第0位的元素是20,第1位的元素是30,。

显示位置为:{50,40,30,20,10}.

此时,第四趟比较结束时,数组中的元素位置已经发生变化“{50,40,30,20,10}”,原来在第三趟比较结束时,第0位上的元素40 已经到了倒数第四位。但是我们只是把原来第0位的元素排到倒数第四位,此时排序为{50,40,30,20,10} 已经达到我们要求的效果了!所以不用在排序了!

 

从上面的表述中我们看到一个规律数组中5个元素,比较了4趟,而且每趟的比较次数一次比一次少减少。用数字表达时:

第一趟:

第一次:20,10,30,40,50

第二次:20,30,10,40,50

第三次:20,30,40,10,50

第四次:20,30,40,50,10

第二趟:

第一次:30,20,40,50,10

第二次:30,40,20,50,10

第三次:30,40,50,20,10

第三趟:

第一次:40,30,50,20,10

第二次:40,50,30,20,10

第四趟:

第一次:50,40,30,20,10

有上述的排列来看,当数组中的元素 为 n 时,趟数 为 t ,那么就要比较t= n-1 趟,第t趟时为,n-t次,由此可见我们要排序时,要用到嵌套的for循环。

由此我写的C#代码为:

            int[] scores = {10,20,30,40,50 };

            for (int i = 0; i < scores.Length - 1;i++ )    控制趟数的代码:

 

            {

                for (int j = 0; j < scores.Length - 1 - i; j++)   控制次数的代码

                {

                }

            }

 

用此处的 i 来控制数组中趟数循环,当 i =0 时,循环为第一趟,当i =1时,循环第二趟,所以得出趟数 为i + 1趟。

假设,(依据上面那个实例)

当i =0 时,为趟数:为i + 1趟,也就是:第一趟。数组中有5个元素,所以第一趟要循环4次。

当i =1 时,为趟数:为i + 1趟,也就是:第二趟。数组中有5个元素,所以第二趟要循环3次。

所以我们能得出一个规律,当i =0 时,为趟数:为i + 1趟,次数:为5-(i + 1)次,i =0,所以次数为:4;满足上面的规律。

所以元素为n时,趟数为:n-1趟,每趟次数为:n-i-1次。

所以就有了上面的for的嵌套循环。

在里面那个for循环 的交换公式为:

if (scores[j] > scores[j + 1])//如果从小到大输出,就用">"号,从大到小输出,用"<"号

            {

                int temp = scores[j];

                scores[j] = scores[j + 1];

                scores[j + 1] = temp;

            }

 

答应输出的代码为:(不在for循环里打印输出)

            for (int i = 0; i < scores.Length; i++)

            {

                Console.WriteLine(scores[i]);

            }

下面给大家发完整的代码:

            //数组中,排序为 n个元素要排n-1趟

            //          第t趟比较的次数为n-t次

            int[] scores = { 18, 28, 94, 51, 60, 84, 48, 51 };

            for (int i = 0; i < scores.Length - 1; i++)

//控制比较的趟数,循环次表示表示比较了一次

            {

                for (int j = 0; j < scores.Length - 1 - i; j++)

//次数的比较,当第i趟时,元素长度n-i-1 次

                {

                    if (scores[j] > scores[j + 1])

//如果从小到大输出,就用">"号,从大到小输出,用"<"号

                    {

                        int temp = scores[j];

                        scores[j] = scores[j + 1];

                        scores[j + 1] = temp;

                    }

                }

            }

            for (int i = 0; i < scores.Length; i++)

            {

                Console.WriteLine(scores[i]);

            }

 

当然在C#排序中,冒泡排序不是最快的排序方法,如果有机会我将继续给大家介绍C#的排序方法。

如:

ü      选择排序

ü      插入排序

ü      快速排序

以上就是冒泡排序法的全部解释,如果有谁不理解的,可一个给我留言,转载请注明出处。

 

---------------------- Windows Phone 7手机开发、.Net培训、期待与您交流! ----------------------

 详细请查看:http://net.itheima.com/

 

 

原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 在太原出租车丢了东西怎么办 太原社保卡丢了怎么办 太原铁路医保卡丢了怎么办 学车体检视力不合格怎么办 换驾照色弱被拒怎么办 在上海考驾照贵怎么办 驾驶证有效期过了半年怎么办 资格证脱审2年了怎么办 换驾驶证时眼睛近视了怎么办 违章累计扣12分怎么办 一个违章扣12分怎么办 a1驾照扣3分怎么办 a1驾照扣12分怎么办 吃了毓婷哺乳了怎么办 吃了毓婷后出血怎么办 吃金毓婷喝了水怎么办 白带浓稠浆糊样怎么办 驾校学费不给退怎么办 b1驾证扣了9分怎么办 机动车登记证丢了怎么办 b1驾照扣了9分怎么办 听力正常体检不过关怎么办 做完人流第二天同房了怎么办 医院的票据丢了怎么办 体检人体成分(脂肪缺乏)该怎么办 诊断出右下叶肺炎怎么办 做胸透穿钢圈内衣怎么办 预约不上留学体检怎么办 跨省离职后社保怎么办 开车到成都限号怎么办 月经量多怎么办吃什么 报驾校体检视力不达标怎么办 换驾驶证c1一只眼不合格怎么办 考驾照紧张腿抖怎么办 驾照该换了色弱怎么办 怀孕5个月感冒咳嗽怎么办 怀孕4个月喉咙痛怎么办 怀孕5个多月总是咳嗽尿失禁怎么办 怀孕7个月感冒了怎么办 怀孕7个月感冒喉咙痛怎么办 孕38周感冒咳嗽喉咙痛怎么办