快速排序另一种实现方法(原创)

我用的是C#实现的,思路不变,也就是比基准数大的数放在基准数右边,比基准数小的数放在基准数的左边 ,是看了一张图写来的(某个贴找到的),实现方法是用一个for循环找到比基准小的数然后让它下标连续,下标连续的实现方法创了一个count来记数,利用基准数与count之差,若下标连续则它们之差不变,不然则交换数让它连续,最后让基准数与一排较小的连续的数的最后一位交换,完成一次的分区,然后我只想出一次的分区,递归是看另一个贴想出来的,但算法新的实现是我一个人想几天想出来的,并未抄袭任何人,属于原创。

让我想出递归的教程很不错,大家可以一起看:

快速排序(过程图解) - chenxiangxiang - 博客园假设我们现在对“6 1 2 7 9 3 4 5 10 8”这个10个数进行排序。首先在这个序列中随便找一个数作为基准数(不要被这个名词吓到了,就是一个用来参照的数,待会你就知道它用来做啥的了)。为了方https://www.cnblogs.com/cxxjohnson/p/14682964.html

using System;

namespace ConsoleApp3
{
    class Program
    {
        static void sort(int[] intArr, int low, int high) 
        {
            if (low >= high)
            {
                return;
            }
            //处理一个分区
            int temp, count = 0;
            for (int i = low; i <= high; i++)
            {
                //找到不连继的数,让它连继,即分区
                if (intArr[low] >= intArr[i])
                {
                    if ((i - count) != low)
                    {
                        temp = intArr[i];
                        intArr[i] = intArr[low + count];
                        intArr[low + count] = temp;
                    }
                    count++;
                }
            }
            temp = intArr[low];
            intArr[low] = intArr[low + count - 1];
            intArr[low + count - 1] = temp;
            sort(intArr, low, low + count - 2);
            sort(intArr, low + count, high);
        }
        static void Main(string[] args)
        {
            int[] intArr = { 3, 44, 38, 5, 47, 15, 36, 26, 27, 2, 46, 4, 19, 50, 15,12,14,147,597,156,752,4102,9,911,145,99, 666,47, 15, 36, 26, 27, 2, 46, 4, 19, 50, 15, 12, 14, 147, 597, 156, 752, 4102, 9, 911, 145, 99, 666 };
            // int[] intArr{ 0, 1, 2, 3, 4, 5, 6, 7, 8,  9 };
            sort(intArr, 0, intArr.Length-1);
            for (int i = 0; i < intArr.Length; i++) 
            {
                Console.Write(intArr[i]+",");
            }

        }
    }
}

猜你喜欢

转载自blog.csdn.net/qq_39858654/article/details/121465084