冒泡、简单选择、直接插入 的介绍与实现

简介

冒泡排序、简单选择排序、直接插入排序,这三种可以算的上是算法当中最简单的几种了,此篇文章就是简单介绍了这几种排序的实现、对比与分析。

算法

算法是什么,算法(Algorithm)是指解题方案的准确而完整的描述,是一系列解决问题的清晰指令,算法代表着用系统的方法描述解决问题的策略机制。

但是,要注意的一点是,我们学的叫做算法,排序也是一种算法,或者说我们学的叫做排序算法更为贴切,不要把排序与算法的范围所弄混便可。

排序与算法的范围关系

冒泡排序

        public static int[] Sort(int[] nums)
        {
            int temp; //定义临时变量
            // 外层循环用来计算数字个数
            for (int i = 0; i < nums.Length; i++)
            {
                // 内层循环用来冒出每一趟最大/小的数字
                for (int j = 0; j < nums.Length - i - 1; j++)
                {
                    // 相邻两个数字进行比较,如果位置颠倒那么交换位置
                    if (nums[j] > nums[j + 1])
                    {
                        temp = nums[j];
                        nums[j] = nums[j + 1];
                        nums[j + 1] = temp;
                    }

                    // 打印数组
                    Console.Write("i=" + i + ", " + "j=" + j + "  :  ");
                    foreach (int num in nums)
                    {
                        Console.Write(num + " ");
                    }
                    Console.WriteLine();

                }
                Console.WriteLine();
            }
            return nums;
        }

冒泡排序的中心思想:

我们可以从字面意思来理解,冒泡排序,就是冒泡,每一次将最大的数字冒到最上面,依次循环,便可以得到有序序列。

简单选择排序

        public static int[] Sort(int[] nums)
        {
            for (int i = 0; i < nums.Length; i++) // 外循环用来排每一个数
            {
                int min = i; // 定义最小值的index为i
                for (int j = i + 1; j < nums.Length; j++) // 内循环用来找到无序的最小值的index
                {
                    if (nums[j] < nums[min]) // 如果某个值比index为min的值小,则把它重新赋给min
                    {
                        min = j;
                    }
                }
                // 将无序的最小值的index与无序的第一个值的index进行交换
                int temp = nums[min];
                nums[min] = nums[i];
                nums[i] = temp;
            }
            return nums;
        }

简单选择的中心思想:

同样从字面意思来进行理解,把序列分为有序和无序,从无序序列中选择出最小的数字,然后与无序序列的第一个值进行交换,那么有序序列便多了一个值,无序序列便少了一个值,依次循环,便可得到有序序列。

直接插入

        public static int[] Sort(int[] nums)
        {
            for (int i = 1; i < nums.Length; i++) // 外循环,用于排序每一个数字
            {
                int index = 0; // 要插入的索引值
                int temp = nums[i]; // 岗哨
                for (int j = i - 1; j >= 0; j--) // 内循环,用于将无序第一个插入到有序序列当中
                {
                    if (nums[j] > temp) // 判断有序数组是否向后移动
                    {
                        nums[j + 1] = nums[j];
                        index = j;
                    };
                }
                nums[index] = temp; // 将岗哨的值插入到要插入的位置处
            }

            // 打印数组
            foreach (int num in nums)
            {
                Console.Write(num + "  ");
            }
            Console.ReadKey();

            return nums;
        }

直接插入排序的中心思想:

同样,从字面来理解它的意思,以第一个数字为基准,将数组分为有序(第一个)和无序(第一个之外所有的),然后拿出无序第一个进行记录,将其插入到有序当中,依次循环,便可的到有序序列。

思维导图:

三种排序介绍

总结

三种排序算法的中心思想都不相同,但是他们的性能相差不大,所以,要看合适的场景来进行选择所需要的排序方式来实现所需要的功能。

持续完善ing…

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 17
    评论
评论 17
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Geek-Banana

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值