首页 > 代码库 > 快速排序算法

快速排序算法

快速排序采用一种“分而治之、各个击破”的观念。

快速排序使用分治法(Divide and conquer)策略来把一个序列(list)分为两个子序列(sub-lists)。

步骤为:

1、从数列中挑出一个元素,称为 "基准"(pivot),

2、重新排序数列,所有元素比基准值小的摆放在基准前面,所有元素比基准值大的摆在基准的后面(相同的数可以到任一边)。在这个分区退出之后,该基准就处于数列的中间位置。这个称为分区(partition)操作。

3、递归地(recursive)把小于基准值元素的子数列和大于基准值元素的子数列排序。

递归的最底部情形,是数列的大小是零或一,也就是永远都已经被排序好了。虽然一直递归下去,但是这个算法总会退出,因为在每次的迭代(iteration)中,它至少会把一个元素摆到它最后的位置去。

下面是一个小例子:

 1 using System; 2 using System.Collections.Generic; 3 using System.Linq; 4 using System.Text; 5 using System.Threading.Tasks; 6  7 namespace Quicksofttest 8 { 9     class Program10     {11         private static int[] values =new int[20];// {0, 1, 345, 2, 3, 45, 7, 43, 3, 6, 45, 345, 45, 32, 3, 75, 576, 56, 3, 2, 3456 };12         static void Main(string[] args)13         {14             Console.WriteLine("原來數組為:");15             Random radom = new Random();16             for (int i = 0; i < 20; i++)17             {18                 values[i] = radom.Next(100);19                 Console.Write(values[i]+" ");20             }21             Quicksoft(0,values.Length-1);22             Console.WriteLine("");23             Console.WriteLine("***********************************");24             Console.WriteLine("排序后:");25             foreach (var item in values)26             {27                 Console.Write(item + " ");28             }29             Console.Read();30         }31 32         private static void Quicksoft(int left, int right)33         {34             if (left>right)35             {36                 return;37             }38             int temp= values[left];39             int i = left;40             int j = right;41             while (i != j)42             {43                 //從右向左開始查找44                 while (values[j] >= temp&&i<j)45                 {46                     j--;47                 }48                 while (values[i] <= temp&&i<j)49                 {50                     i++;51                 }52                 if (i<j)53                 {54                     int t = values[i];55                     values[i] = values[j];56                     values[j] = t;57                 }58                 values[left] = values[i];59                 values[i] = temp;60                 Quicksoft(left,i-1);61                 Quicksoft(i+1, right);62 63             }64         }65 66        67        68     }69 }

 

快速排序算法