C#数据结构与算法系列(二十二):快速排序算法(QuickSort)
1.介绍
快速排序(Quicksort)是对冒泡排序的一种改进。基本思想是:通过一趟排序将要排序的数据分割成独立的两部分,
其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,
整个排序过程可以递归进行,以此达到整个数据变成有序序列
2. 示意图
3. 示例
要求: 对 [-9,78,0,23,-567,70] 进行从小到大排序
public class QuickSort { public static void Test() { int[] arr = { -9, 78, 0, 23, -567, 70 }; Sort(arr,0,arr.Length-1); System.Console.WriteLine(string.Join(",",arr)); } public static void Sort(int[] arr ,int left,int right) { int l = left; int r = right; //中间值 int middle = arr[(l + r) / 2]; //temp临时变量 int temp = 0; //while循环的目的是让比middle值小的放在左边 比middle大的值放在右边 while (l<r) { //在middle的左边一直找,找到大于等于middle的值才退出 while (arr[l]<middle) { l++; } //在middle的右边边一直找,找到小于等于middle的值才退出 while (arr[r]>middle) { r -= 1; } //如果l>=说明middle的左边两边的值,已按照左边全是小于等于middle的值,右边都是大于middle的值 if (l>=r) { break; } //交换 temp = arr[l]; arr[l] = arr[r]; arr[r] = temp; //如果交换完之后,发现这个arr[l]==middle这个值 ,-- 前移 if (arr[l]==middle) { r -= 1; } //如果交换完之后,发现这个arr[r]==middle这个值 ,++ 后移 if (arr[r]==middle) { l++; } } //如果l==r,必须l++,r--,否则会出现栈溢出 if (l==r) { l += 1; r -= 1; } //向左递归 if (left<r) { Sort(arr, left, r); } //向右递归 if (right>l) { Sort(arr, l, right); } } }
效果图
4.总结思想
简而言之就是首先获取数组的中间值 然后将中间值于两边的数据比较 如左边的大于中间值或者右边的小于中间值 那么就替换
然后再进行左右两边递归
微信:17873041739