C#快速排序算法
※ 快 速 排 序 ※
快速排序算法是基于冒泡排序的一种数值类型排序算法
顾名思义,就是更快捷的排序,系统资源占用仅为冒泡排序的4%左右
快速排序的思想为 分治法 即 分区域 各行管理
快速排序的基本步骤为:
1.确定一个数组;
2.任意取一个数组元素作为第一轮排序的标准值key(一般取数值段的第一个);
3.遍历数组,将所有比key小的元素放在key左边,比key大的元素放在key右边;
4.以key为分界点,将数组元素分成左右两个数值段;
5.对左右两个区段重复第三部操作(递归);
6.当每个区段只剩一个元素时,递归停止,排序完成;
C# 代码
static void QuickSort(int[] nums, int left, int right)//数组,起始下标,数组长度 { if (left < right) //直到排序的左右区间只剩一个值(递归停止条件) { int i = left; int j = right - 1; int middle = nums[(left + right) / 2]; while (true) { while (i < right && nums[i] < middle) { i++; }; //在middle左边找到一个比middle大的值 while (j > 0 && nums[j] > middle) { j--; }; //在middle右边找到一个比middle小的值 if (i == j) break; //当i=j时,middle左边都是比middle小的数,右边都是比middle大的;跳出循环 nums[i] = nums[i] + nums[j]; nums[j] = nums[i] - nums[j]; nums[i] = nums[i] - nums[j]; //两个值交换位置 if (nums[i] == nums[j]) j--; //如果两个值相等,且等于middle,为避免进入死循环,j-- } QuickSort( nums, left, i); //递归 QuickSort( nums, i + 1, right); } }