C# 常用排序算法



1, 快速排序:使用分冶思想,不断以某一元素为边界,分割成大小不同的区域。对于大多数数据集,这是最快的算法,除非分割成的区域每次都只有1个。算法复杂度:O(nLogn)

        public static void QuickSort(int[] ar, int begin, int end)
        {
            if (begin >= end)//1个或者无效区域
                return;
            if (end - begin == 1)
            {

            }

            int i = begin, j = end;

            int hole = (begin + end) / 2;
            int value = ar[hole];

            while (i <= j && (j > hole || i < hole))
            {
                while (j > hole && j >= i)
                {
                    if (ar[j] >= value)
                    {
                        j--;
                    }
                    else
                    {
                        ar[hole] = ar[j];
                        hole = j;
                        j--;
                    }

                }
                //Pt(ar);
                while (i < hole && i <= j)
                {
                    if (ar[i] <= value)
                    {
                        i++;
                    }
                    else
                    {
                        ar[hole] = ar[i];
                        hole = i;
                        i++;
                    }

                }
                //Pt(ar);
            }
            ar[hole] = value;
            //Pt(ar);
            if (hole - begin > 1)
            {
                QuickSort(ar, begin, hole - 1);
            }
            if (end - hole > 1)
            {
                QuickSort(ar, hole + 1, end);
            }
        }
QuickSort



2, 冒泡排序:思想简单的算法,平均算法复杂度:O(n^2)

        public static void BubbleSort(int[] ar)
        {
            bool isDoSorted = false;

            for (int i = 0; i < ar.Length; i++)
            {
                isDoSorted = false;
                for (int j = 0; j < (ar.Length - 1 - i); j++)
                {
                    if (ar[j] > ar[j + 1])
                    {
                        int temp = ar[j + 1];
                        ar[j + 1] = ar[j];
                        ar[j] = temp;
                        isDoSorted = true;
                    }
                }
                if (!isDoSorted)
                {
                    break;
                }
            }
        }

        public static void Pt(int[] ar)
        {
            StringBuilder sb = new StringBuilder();
            sb.Append("Arrary: ");
            foreach (int i in ar)
            {
                sb.Append(i.ToString() + ", ");
            }
            Console.WriteLine(sb.ToString());
        }

        public static int[] fillArr()
        {
            int[] ar = new int[1000];

            for (int i = 0; i < ar.Length; i++)
            {
                ar[i] = rd.Next(0, 99); //i;
            }

            return ar;
        }
BubbleSort

 

转载于:https://www.cnblogs.com/netact/p/3710477.html

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值