C#基础(27—30)冒泡排序和选择排序

一、冒泡排序

基本概念

//排序时计算机内经常进行的一种操作,其目的是将一组“无序”的记录序列调整为“有序”的记录序列
            //常用的排序例子
            //8  7  1  5  4  2  6   3    9
            //把上面的这个无序序列 变为 有序 (升序或降序) 序列的过程就是排序
            //1  2  3  4  5  6  7   8   9(升)
            //9  8  7  6  5  4  3   2   1(降)

            //在程序种 序列一般存储在数组当中
            //所以 排序往往是对  数组 进行排序

基本原理

//两两相邻
//不停比较
//不停交换
 //比较n轮

实现

//第一步  如何比较数组中两两相邻的数
            //1, 7, 4, 3, 5, 9
            //从头开始
            //第n个数 和 第n+1个数比较
            //如果 第n个数 比 第n+1个数大

int[ ] arr = new int[] { 1, 7, 4, 3, 5, 9 };

 for (int i = 0; i < arr.Length; i++)
            {
                //进一次循环比一轮
                for (int n = 0; n < arr.Length - 1-i; n++)
                {
                    if (arr[n] > arr[n + 1])
                    {
                        //交换位置                   
                        int k = arr[n + 1];
                        arr[n + 1] = arr[n];
                        arr[n] = k;
                    }
                }
            }
            for (int i = 0; i < arr.Length; i++)
            {
                Console.WriteLine(arr[i]);
            }

//第三步 如何换m轮 数组长度有多少  就换多少轮

//第四步 优化 多余的算力  最大的数每一轮依然要参与比较

            //1.确定位置的数 不用再比较
            // 确定了一轮后  极值(最大最小) 已经放到对应位置  
            // 所以 即使没完成 n 轮 后面的数也不用参与比较

            //总结
            //两两相邻
            //不停比较
            //不停交换
            //数组多长就比较多少轮

            //套路写法
            //两层循环
            //外层轮数
            //内层比较
            
            //优化
            //1.比过了的不再比
            //2.加入bool

二、选择排序

基本原理

8 7 1 6 5 2
新建中间商
依次比较
找出极值(最大最小)
放入目标位置
比较n轮

代码实现

 //第五步 比较 n 轮
            for (int m = 0; m < arr.Length; m++)
            {

                //第一步,申明中间商 来记录索引
                //每一轮开始  默认第一个都是极值
                int index = 0;
                //第二步
                //依次比较
                // -n 的目的 是为了排除  放好的数
                for (int n = 1; n < arr.Length-m; n++)
                {
                    //第三步 找出极值
                    if (arr[index] < arr[n])
                    {
                        index = n;
                    }
                }
                //第四步 放入目标位置
                //Length -1 -轮数
                //如果当前极值就是目标位置  就没必要交换
                if (index != arr.Length - 1 - m)
                {
                    int temp = arr[index];
                    arr[index] = arr[arr.Length - 1 - m];
                    arr[arr.Length - 1 - m] = temp;
                }

            }
            for (int i = 0; i < arr.Length; i++)
            {
                Console.WriteLine(arr[i]);
            }

//总结
            //基本概念
            //新建中间商
            //依次比较
            //找出极值
            //放入目标位置
            //比较n轮

            //套路写法
            //两层循环
            //外层轮数
            //内层寻找
            //初始索引
            //记录极值
            //内层循环外交换

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值