c#中快速排序法的示例分析

发布时间:2022-01-15 14:41:50 作者:小新
来源:亿速云 阅读:97

这篇文章给大家分享的是有关c#中快速排序法的示例分析的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。

  快速排序也是我们算法的一种。这中排序法速度比较快,基本上以㎡的速度递减(其中m是集合中元素的个数)其核心思想是交换大数与小数的位置。

主要步骤如下:

(1)准备一个至少两个元素的无序的集合;

(2)跟二分法一样得到初始索引(starindex)、结束索引(endindex)并求得中值索引(middleindex)和中值(middle);

(3)在整个数组中从前往后第一个比中值大的数并记下位置(highindex);同时从后往前找第一个比中值小的数并几下位置(lowindex); 如果highindex<lowindex时就交换着两个数的位置;

(4)接着步骤⑶继续寻找。从highindex的后置(highindex++)开始继续从前往后找第一个比中值大的数,同时从lowindex的前一位置(lowindex--)开始继续从后往前找第一个比中值小的数,如果highindex<lowindex时就交换着两个数的位置;直到highindex>=lowindex时,这一轮结束。

(5)再利用highindex和lowindex的变化缩减查找范围进入下一轮查找。这一轮查找是将整个数组切成两部分Part1[startindex,highindex-1];Part2[lowindex+1,endindex]

继续像步骤3、4那样分别对没以部分查找,交换直到整个数组全部有序。

下来用一个实例来领会一下快速排序的神奇之处:

namespace prj快速排序
{
    class Program
    {
        static void Main(string[] args)
        {
            //int[] ary = new int[] { 12, 4, 0, 6, 11, 17, 7, 1, 24 };//将过检测合格
            //准备一个随机的无序数组
            int[] ary = new int[] { 9,8,7,6,5,4,3,2,1 };
            //调用QuickSort函数进行快速排序,并传入参数
            QuickSort(ary, 0, ary.Length - 1);
            //遍历整个数组将结果输出
            foreach (int x in ary)
            {
                Console.WriteLine(x);
            }
                                         
        }
        static void QuickSort(int[] ary, int startIndex, int endIndex)
        {
            //如果初始索引大于等于结束索引,结束查找
            if (startIndex>=endIndex)
            {
                return;
            }
            int highIndex = startIndex;
            int lowIndex = endIndex;
            //利用中值索引得到中值
            int middle =ary[ (startIndex + endIndex) / 2];
            while (true)
            {
               //从前往后找第一个比中值大的数,找到之后立刻结束循环
                for (int i = highIndex; i <= endIndex; i++)
                {
                    if (ary[i] >= middle)
                    {
                        //得到第一个比中值大的数的位置
                        highIndex = i;
                        break;
                    }
                }
                //从后往前找第一个比中值小的数,找到之后立刻结束循环
                for (int i = lowIndex; i >= startIndex; i--)
                {
                    if (ary[i] <= middle)
                    {
                        //得到第一个比中值小的数的位置
                        lowIndex = i;
                        break;
                    }
                }
                //如果highIndex >= lowIndex就意味着中值之前没有比中值大的数,中值之后没有比中值小的数那么久结束查找
                if (highIndex >= lowIndex)
                {
                    break;
                }
                //交换中值之前的第一个大数与中值之后的第一个小数的位置
                int temp=ary[highIndex];
                ary[highIndex] = ary[lowIndex];
                ary[lowIndex] = temp;
                lowIndex--;//下一次查找从该位置的前一位继续找比中值小的数
                highIndex++;//下一次查找从该位置的后一位继续找比中值大的数
            }
            //将数组分成两部分分别进行上述过程的查找,交换直到整个数组有序
            QuickSort(ary, startIndex, highIndex - 1);
            QuickSort(ary, lowIndex + 1, endIndex);
        }
    }
}

感谢各位的阅读!关于“c#中快速排序法的示例分析”这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,让大家可以学到更多知识,如果觉得文章不错,可以把它分享出去让更多的人看到吧!

推荐阅读:
  1. C#中输入法的示例分析
  2. python中回溯法模板的示例分析

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

上一篇:以太坊DAO股东协会智能合约怎么实现

下一篇:springboot整合quartz定时任务框架的方法是什么

相关阅读

您好,登录后才能下订单哦!

密码登录
登录注册
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》