数据结构算法-排序

1.冒泡排序实现

        /// <summary>
        /// BubbleSorter冒泡排序
        /// n个元素的数组
        /// 第一轮排序:处理的数组元素下标:0到n-1,邻近两个元素依次比较,将最大的元素放到数组尾部,即数组下标为n-1的位置;
        /// 第二轮排序:处理的元素0到n-2个元素,进行第一轮的比较,将最大的元素放到数组下标为n-2的位置,后续几轮排序依次类推
        /// 空间复杂度:O(1),平均时间复杂度:O(n^2),最好时间复杂度:O(n),最坏时间复杂度:O(n^2),稳定算法,(排序之后,相同元素的在数组中的相对位置保持不变,则该算法为稳定算法)
        /// </summary>
        public void BubbleSort(int[] args)
        {
            if (args==null|| args.Length<=1 )
            {
                return;
            }

            var flag = false;
            for (int i = 0; i < args.Length; i++)
            {
                for (int j = 0; j < args.Length-i-1; j++)
                {
                    if (j<args.Length && args[j]>args[j+1])
                    {
                        var temp = args[j+1];
                        args[j+1] = args[j];
                        args[j] = temp;
                        flag = true;
                    }
                }

                if (!flag)
                {
                    break;
                }
            }
        }

2.插入排序

        /// <summary>
        /// 插入排序
        /// 插入排序,第一个元素默认是有序的,此时有序数组包含第一个元素,从第二个元素开始依次将后续
        /// 元素插入到前面的有序数组中,并保持新的数组是有序的
        /// 空间复杂度:O(1),平均时间复杂度:O(n^2),最好时间复杂度:O(n),最坏时间复杂度:O(n^2),稳定算法
        /// </summary>
        /// <param name="args"></param>
        public void InsertSort(int[] args)
        {
            if (args == null || args.Length <= 1)
            {
                return;
            }

            for (int i = 0; i < args.Length; i++)
            {
                var element = args[i];//把要插入有序数组的目标元素保存下来
                var j = i - 1;
                while (j >= 0 && element < args[j])
                {
                    args[j + 1] = args[j];//将现有有序数组中,比目标元素大的元素往有序数组的后面移动
                    j--;
                }
                //执行最后一次j减了1,所以要再加1
                args[j + 1] = element;

            }
        }

3.选择排序

         /// <summary>
        /// 选择排序
        /// 选择数组中最小的一个元素放到数组第一个位置,除数组第一个元素外,挑选数组中剩余的最小的数放到数组的第二位置,除数组第一,二个元素外,
        /// 挑选数组中剩余的最小的数放到数组的第三个位置,依次类推
        /// 空间复杂度:O(1),平均时间复杂度:O(n^2),最好时间复杂度:O(n^2),最坏时间复杂度:O(n^2),稳定算法
        /// </summary>
        /// <param name="args"></param>
        public void SelectSort(int[] args)
        {
            if (args==null||args.Length<=1)
            {
                return;
            }

            for (int i = 0; i < args.Length; i++)
            {
                var element = i;
                for (int j = i; j < args.Length-i; j++)
                {
                    if (args[j]<args[element])
                    {
                        element = j;
                    }
                }

                var temp = args[i];
                args[i] = args[element];
                args[element] = temp;
            }
        }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值