快速排序置随机数代码实现

来源:互联网 发布:制衣打菲软件 编辑:程序博客网 时间:2024/06/05 17:50
using System;using System.Collections.Generic;using System.Linq;using System.Text;namespace SortLib{    class QuickkSort    {        static Random random = new Random();        /// <summary>        /// 快速排序        /// </summary>        /// <param name="p">序列的起点</param>        /// <param name="q">序列的终点</param>        /// <param name="nums">用于排序的数组</param>        public static void QuickSort(int p, int q, int[] nums)        {            //q大于p结束条件 保证最后一个数的时候可行            if (q > p)            {                int r = Partition(p, q, nums);                QuickSort(p, r - 1, nums);                QuickSort(r + 1, q, nums);            }        }        /// <summary>        /// 初始化一个随机数 与末尾数交换        /// </summary>        /// <param name="p"></param>        /// <param name="q"></param>        /// <param name="nums"></param>        /// <returns></returns>        private static int RandomPartiition(int p, int q, int[] nums)        {            int ran = random.Next(p, q);            exchange(ref nums[ran], ref nums[q]);            return Partition(p, q, nums);        }        /// <summary>        /// 以最后一个数分割,小的放左边,大的放右边        /// </summary>        /// <param name="p"></param>        /// <param name="q"></param>        /// <param name="nums"></param>        /// <returns></returns>        private static int Partition(int p, int q, int[] nums)        {            //记录小数,以保证i+1为大数            int i = p - 1;            //以最后一个数切割            int key = nums[q];            for (int j = p; j < q; j++)            {                if (nums[j] < key)                {                    //小的话就让i+1也就是大数与这个小数交换                    i++;                    exchange(ref nums[i], ref nums[j]);                }            }            exchange(ref nums[q], ref nums[i + 1]);            return i + 1;        }        private static void exchange(ref int a, ref int b)        {            int temp = 0;            temp = a;            a = b;            b = temp;        }    }}

原创粉丝点击