温故而知新--冒个泡、排个序

简介: 在C#中说到排序的方法,相信大家都会首先想到冒泡排序,当然也还有其它的排序办法,如选择排序等等,本文就讲解一下平常用的最多的冒泡排序。 首先我们看一下冒泡排序的原理,我们声明一个数组: //这种声明的话数组长度和后面的值必须保持一致才可以, //比如说你声明的数组长度是5,那么你后面必须有5个数值。

在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());
            }           
        }

 

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

 

相关文章
|
28天前
|
NoSQL 关系型数据库 MySQL
2024 RedisAnd Mysql基础与进阶操作系列(17)作者——LJS[你个小黑子这都还学不会嘛?你是真爱粉嘛?真是的 ~;以后请别侮辱我家鸽鸽]
如何通过php和python客户端来操作Redis数据库等保姆式具体操作详解步骤;举例说明、注意点及常见报错问题所对应的解决方法
|
28天前
|
存储 NoSQL 关系型数据库
2024 RedisAnd Mysql基础与进阶操作系列(13)作者——LJS[你个小黑子这都还学不会嘛?你是真爱粉嘛?真是的 ~;以后请别侮辱我家鸽鸽]
Redis之Nosql数据库分类、存储类型、特点;Redis 作用、与其他库的对比、使用场景以及如何部署、安装等具体详解步骤;举例说明、注意点及常见报错问题所对应的解决方法
|
29天前
|
存储 算法 安全
2024重生之回溯数据结构与算法系列学习【无论是王道考研人还真爱粉都能包会的;不然别给我家鸽鸽丢脸好嘛?】
数据结构的基本概念;算法的基本概念、特性以及时间复杂度、空间复杂度等举例说明;【含常见的报错问题及其对应的解决方法】
|
28天前
|
NoSQL 关系型数据库 MySQL
2024 RedisAnd Mysql基础与进阶操作系列(16-3)作者——LJS[你个小黑子这都还学不会嘛?你是真爱粉嘛?真是的 ~;以后请别侮辱我家鸽鸽]
Redis数据类型之List类型语法格式说明表及LPUSH/LPUSHX/LRANGE、LPOP/LLEN、LREM/LSET/LINDEX/LTRIM、LINSERT RPUSH/RPUSHX/RPOP/RPOPLPUSH等具体操作详解步骤;举例说明、注意点及常见报错问题所对应的解决方法
|
28天前
|
NoSQL 关系型数据库 Redis
2024 RedisAnd Mysql基础与进阶操作系列(18)作者——LJS[你个小黑子这都还学不会嘛?你是真爱粉嘛?真是的 ~;以后请别侮辱我家鸽鸽]
Redis 如何高级应用之密码防护、数据持久化、基于文件追加方式持久化、主从同步、消息订阅类型与之对应的命令、事务从开始到执行会经历以下三个阶段、多数据库等保姆式具体操作详解步骤;举例说明、注意点及常见报错问题所对应的解决方法
|
28天前
|
存储 NoSQL 关系型数据库
2024 RedisAnd Mysql基础与进阶操作系列(16-4)作者——LJS[你个小黑子这都还学不会嘛?你是真爱粉嘛?真是的 ~;以后请别侮辱我家鸽鸽]
Redis数据类型之Set类型及相关命令如:SADD/SMEMBERS/SCARD/SISMEMBER、SPOP/SREM/SRANDMEMBER/SMOVE、SDIFF/SDIFFSTORE/SINTER/SINTERSTORE 等具体操作详解步骤;举例说明、注意点及常见报错问题所对应的解决方法
|
28天前
|
NoSQL 关系型数据库 MySQL
2024 RedisAnd Mysql基础与进阶操作系列(19)作者——LJS[你个小黑子这都还学不会嘛?你是真爱粉嘛?真是的 ~;以后请别侮辱我家鸽鸽]
Redis应用场景之取最新N个数据的操作、精准设定过期时间、计数器应用、Uniq操作,获取某段时间所有数据排重值、Pub/Sub构建实时消息系统等保姆式具体操作详解步骤;举例说明、注意点及常见报错问题所对应的解决方法
|
28天前
|
存储 NoSQL 关系型数据库
2024 RedisAnd Mysql基础与进阶操作系列(15)作者——LJS[你个小黑子这都还学不会嘛?你是真爱粉嘛?真是的 ~;以后请别侮辱我家鸽鸽]
2024全网最全切最为详细的Redis库配置;你个小黑子这都还学不会嘛?你是真爱粉嘛?真是的 ~;以后请别侮辱我家鸽鸽
|
28天前
|
机器学习/深度学习 NoSQL 关系型数据库
2024 RedisAnd Mysql基础与进阶操作系列(16-1)作者——LJS[你个小黑子这都还学不会嘛?你是真爱粉嘛?真是的 ~;以后请别侮辱我家鸽鸽]
Redis数据类型之string类型及操作:含【NCR/DECR/INCRBY/DECRBY、 GETSET、SETNX、SETRANGE/GETRANGE、SETBIT/GETBIT、MSET/MGET/MSETNX等具体操作详解步骤;举例说明、注意点及常见报错问题所对应的解决方法
|
28天前
|
NoSQL 关系型数据库 MySQL
2024 RedisAnd Mysql基础与进阶操作系列(16-5)作者——LJS[你个小黑子这都还学不会嘛?你是真爱粉嘛?真是的 ~;以后请别侮辱我家鸽鸽]
Redis数据类型之ZSet类型及相关命令如:SADD/SMEMBERS/SCARD/SISMEMBER、ZRANGEBYSCORE/ZREMRANGEBYRANK/ZREMRANGEBYSCORE、ZREVRANGE/ZREVRANGEBYSCORE/ZREVRANK等命令具体操作详解步骤;举例说明、注意点及常见报错问题所对应的解决方法