[复习]快速排序

Posted yueyue184

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了[复习]快速排序相关的知识,希望对你有一定的参考价值。

原始数组L1,从中任意选择一个基准数F(一般选择第1个),小于F的数据放在F的左边记为数组minList,大于F的数据放在F的右边记为数组maxList。那么

L1=minList+F+maxList

然后对minList和maxList再做这样的操作,直到minList和maxList中的元素个数为1或者0的时候停止

 

 1         static void Main(string[] args)
 2         {
 3             Console.WriteLine("Hello World!");
 4             var lists = new List<int>() { 1, 2, 3, 4, 5, 5, 6, 1, 2, 3, 4, 5, 6, 3, 8, 9, 12, 0 };
 5 
 6             QuickSort(ref lists, 0, lists.Count);
 7             foreach (var item in lists)
 8             {
 9                 Console.Write(item + " ");
10             }
11             Console.ReadKey();
12         }
13 
14         static void QuickSort(ref List<int> nums, int left, int right)
15         {
16             if (left >= right)
17             {
18                 return;
19             }
20 
21             int i = left;
22             int j = right - 1;
23             int middle = nums[(left + right) / 2];
24             while (true)
25             {
26                 while (i < right && nums[i] < middle) { i++; };
27                 while (j > 0 && nums[j] > middle) { j--; };
28                 if (i == j) break;
29                 //两个值互换位置
30                 // 第一种可减少内存占用
31                 //时间换内存?
32                 /*
33                 nums[i] = nums[i] + nums[j];
34                 nums[j] = nums[i] - nums[j];
35                 nums[i] = nums[i] - nums[j];
36                 */
37                 //第二种追求速度
38                 //内存换时间?
39                 var temp = nums[i];
40                 nums[i] = nums[j];
41                 nums[j] = temp;
42                 if (nums[i] != nums[j])
43                 {
44                     continue;
45                 }
46                 j--;
47             }
48             QuickSort(ref nums, left, i);
49             QuickSort(ref nums, i + 1, right);
50         }

 

以上是关于[复习]快速排序的主要内容,如果未能解决你的问题,请参考以下文章

2021-10-21java:六千字快速复习七种常用排序

经典算法复习快速排序的应用

快速排序复习

[复习]快速排序

算法设计与分析期中考试复习:代码和经典题目 分治二分动态规划(未完待续)

算法复习_分治算法之二分搜索棋盘覆盖快速排序