通俗易懂的快速排序 附控制器应用程序代码

 
 

快速排序(正向):

1.基准数(key value)是关键,选好基准数,整个算法的复杂度会下降,本例采用数组第一个数来做基准数。

2.选好key之后,就要把后面一大串数字从头尾两端开始,挨个与key比较,假设这两个参数是i和j。先移动j,当j遇到比key小的数的时候停下,i开始移动比对(i的出发点是a[0]不是a[1]),当它遇到比key值更大的数的时候停下。

3.交换a[i],a[j],这时候i、j两个参数还在刚才的位置上。

4.i、j两位继续移动,还是j先移动,重复第二、三步。

5.假如中间再没有满足i、j的条件,这时候只会有两种结果:

(1)j找不到小于key的数,最后移到了i的位置上

(2)j找到小于key的数,i找不到大于key的数,i最终会移到j的位置上

这时候a[i]=a[j]而且是一个小于key的数(这里重要了),同时a[i]的左边全是小于key的而a[i]的右边全是大于key的。

6.交换key和a[i],这时候如无意外key应该在数组的中间(反正不是最左最右,如果是也没关系)。

7.这时候数组被拆分成3块,分别是小于keykey大于key。但是左右两块还是无序的,我们把左右两块当成新数组,重复1-6步。这也就是递规函数。

8.最后输出结果。排序完成。而倒序排序也只需要改动几个大于小于符号。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace ConsoleApplication2
{
    class Program
    {
        static void Main(string[] args)
        {
            Console.WriteLine("进行max数组的快速排序:");
            int[] max = new int[] { 6, 5, 2, 9, 7, 4, 0 };
            int first = 0;
            int last = max.Length - 1;
            QuickSort(max, first, last);
            for (int i = 0; i < max.Length; i++)
            {
                Console.Write(max[i].ToString() + ",");
            }
            Console.ReadLine();
        }
        static void QuickSort(int[] a, int left, int right)
        {
            int i, j, temp, t;
            if (left > right)
                return;
            temp = a[left];
            i = left; j = right;
            while (i != j)
            {
                while (a[j] >= temp && i < j)
                    j--;
                while (a[i] <= temp && i < j)
                    i++;
                if (i < j)
                {
                    //a[j] = a[i] + a[j];
                    //a[i] = a[j] - a[i];
                    //a[j] = a[j] - a[i];
                    t = a[i];
                    a[i] = a[j];
                    a[j] = t;
                }
            }
            a[left] = a[i];
            a[i] = temp;
            QuickSort(a, left, i - 1);
            QuickSort(a, i + 1, right);
        }
    }
}

猜你喜欢

转载自blog.csdn.net/weixin_31808811/article/details/79820053