• 冒个泡、排个序


    冒个泡、排个序

    在C#中说到排序的方法,相信大家都会首先想到冒泡排序,当然也还有其它的排序办法,如选择排序等等,本文就讲解一下平常用的最多的冒泡排序。

    首先我们看一下冒泡排序的原理,我们声明一个数组:

    复制代码
               //这种声明的话数组长度和后面的值必须保持一致才可以,
                //比如说你声明的数组长度是5,那么你后面必须有5个数值。
                int[] Temp01 = new int[5] { 10, 5, 28, 19 ,33};
    
                //集合,这样比较灵活,不必要指定长度
                List<int> list01 = new List<int>() { 10, 5, 28, 19 ,33};
    复制代码

    不管什么方式都可以,这里不做详细的介绍,主要看冒泡的原理,从这个集合 list01 中我们可以看到这5个数值都是没有经过排序的,那我们如何对其排序呢?

    冒泡排序就是将每相邻的两个数值进行比较,如果左边的那一个数值大于右边的那一个数值,则把这两个数值的位置交换,逻辑关系如下图所示:

    每相邻的两个数值都是按照这种规则进行比较,直到最后一个数值,那我们这个 list01 里面的数值最后的结果应该是:5,10,19,28,33

    只要理解了这个规则,那么就很容易在程序里面模仿出来了,这里用一个ListBox来做一个示例,在Form上面放置两个ListBox,lsbData和lsbResult,

    lsbData:表示原始数据,等待被排序。

    lsbResult:原始数据排序之后的结果。

    先看看排序结果是不是我们想要的:

    从小到大排序:

    反过来倒序排序:

    从图上面可以看得出来已经达到了排序的目的,现在我们看看代码分析:

    复制代码
        List<int> list = new List<int>();       
    
            private void btnDesc_Click(object sender, EventArgs e)
            {
                this.lsbResult.Items.Clear();
                this.list.Clear();
                int temp = 0;
                int ValueFirst = 0;
                int ValueSecond = 0;
    
                //其实直接用个控制台打印出来更简单,这里用ListBox是为了看上去效果比较明显一点。
                //这里先把需要排序的数值放到一个list里面去,因为在list里面去改变数值的位置比较
                //容易一些(相比改变ListBox中数值的位置而言要容易)
                for (int m = 0; m < lsbData.Items.Count; m++)
                {
                    list.Add(Convert.ToInt32(lsbData.Items[m].ToString()));
                }
    
                //外层循环
                for (int i = list.Count; i > 0; i--)
                {
                    for (int j = 0; j < i - 1; j++)
                    {
                        //这里提前将每一个数值取出来,在DeBug的时候方便查看其结果。
                        ValueFirst = Convert.ToInt32(list[j].ToString());
                        ValueSecond = Convert.ToInt32(list[j + 1].ToString());
    
                        if (ValueFirst > ValueSecond)
                        {
                            //对相邻的两个值进行比较,将较大的那个值放到temp里面。
                            //然后交换数值的位置
                            temp = Convert.ToInt32(list[j].ToString());
                            list[j] = list[j + 1];
                            list[j + 1] = temp;
                        }
                    }
                    //这里是倒序排序,如果想反过来的话只要修改一下For循环即可。
                    this.lsbResult.Items.Add(list[i - 1].ToString());
                }           
            }
    复制代码

    准备换工作了,所以回忆一下用过的一些知识,温故而知新嘛,如果园友们觉得对您有用,请顶一下,也是给我学习的动力,祝大家生活愉快!

    作者:Allen Chen无影
    邮箱:allen0717@163.com
    本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利.
     
    分类: ASP.NETC#WinForm
    标签: C#冒泡排序
  • 相关阅读:
    qbzt day6 上午
    qbzt day5 下午
    qbzt day5 上午
    【7.24校内交流赛】T3【qbxt】复读警告
    【7.24校内交流赛】T1&T2
    一个一定要好好提溜出来的贪心题
    7.19 讲题
    DP大大大大大赏
    图论经典例题大赏
    数据结构题大赏
  • 原文地址:https://www.cnblogs.com/Leo_wl/p/3277725.html
Copyright © 2020-2023  润新知