2、快速排序(QuickSort)-C#实现

最近想学习算法,所以还是从排序算法练练手,这里分析一下快速排序的思想和C#语言实现,若有不正确之处,请批评指正,笔者不胜感激,若有志同道合的朋友,可以加本人QQ:491880231,一起畅谈码农的世界!


快速排序的虽然比较简单,但对于比较久没接触的朋友来说,还是容易遗忘的,本人觉得这里有两个难点:

1、快速排序中心思想

快速排序的思想归纳起来有的三步:①任意选取序列中的一个元素,用此元素作为“中间元素”,这里说明一下,这个“中间元素”,排序后不一定刚好在序列的中间。②在序列中取出所有大于“中间元素”的元素,放在“中间元素”的右边。③在序列中取出所有小于“中间元素”的元素,放在“中间元素”的左边。经过这三步后便完成了一轮排序。


2、递归调用

经过一轮排序后,序列一般被“中间元素”分成两部分,一部分比“中间元素”小,另一部分反之。所以我们要继续排序剩下的两部分,所以我们要理解递归的思想,只要我们继续利用以上的三步,排序剩下的两部分,最终便会排序完整个序列。


刚开始接触的朋友可能会不太理解我以上说的,这里贴出C#代码,不懂的话直接研究代码可能会比较适合码农:

class Program
    {
        static void Main(string[] args)
        {
            int[] a = { 57, 68, 59, 52, 72, 28, 96, 33, 24 };

            Quicksort(a, 0, a.Length - 1);/*这里原文第三个参数要减1否则内存越界*/

            for (int i = 0; i < a.Length; i++)
            {
                if (i == a.Length - 1)
                {
                    Console.WriteLine("{0}", a[i]);
                    break;
                }
                Console.Write("{0},", a[i]);
            }
        }
        public static void Quicksort(int[] a, int low, int high)
        {
            if (low >= high)
            {
                return;
            }
            int first = low, last = high;
            //此时a[low]被保存到key,所以元素a[low]可以当作是一个空位,用于保存数据,之后每赋值一次,也会有一个位置空出来,直到last==first,此时a[last]==a[first]=key
            int key = a[low];
            while (first < last)
            {
                while (first < last && a[last] >= key)
                {
                    last--;
                }
                a[first] = a[last];
                while (first < last && a[first] <= key)
                {
                    first++;
                }
                a[last] = a[first];
            }
            a[first] = key;
            //递归排序数组左边的元素
            Quicksort(a, low, first - 1);
            //递归排序右边的元素
            Quicksort(a, first + 1, high);
        }
    }


  • 3
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值