首页 > 代码库 > 快速排序算法
快速排序算法
快速排序采用一种“分而治之、各个击破”的观念。
快速排序使用分治法(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 }
快速排序算法
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。