1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80
| //快速排序单元 private int sortUnit(int[] arr, int left, int right) { //此处选择第一个数作为基准值 int pivot = arr[left];
while (left<right) { //从后向前搜索比基准值小的元素 while (right > left && arr[right] > pivot) { //右边下标左移 --right; }
//比基准值小的(等于的)元素放在左边 arr[left] = arr[right];
//从前向后搜索比基准值大(等于)的元素 while (right > left && arr[left] <= pivot) { //左边下标右移 ++left; }
//比基准值大的的元素放在左边 arr[right] = arr[left]; }
//左边的元素小于或等于基准值,右边的则大于基准值,此时左右下标相等,将基准值放在下标当前位置 arr[left] = pivot;
//返回此时的下标 return right; }
//递归调用 private void QuickMain(int[] arr,int left,int right) {
//如果起点下标和终点下标一样直接返回空 if (left >= right) {
return; }
//完成一次单元排序 int index = sortUnit(arr, left, right);
//对左边单元进行排序 QuickMain(arr, left, index - 1); //对右边边单元进行排序 QuickMain(arr, index+1, right); }
/* * 快速排序: * 1.在数组里面找出一个基准值,通常选取第一个数作为基准值 * 2.依据基准值,对数组进行分区操作,使左边的元素小于或等于基准值,右边的元素大于基准值 * */ private void QuickSort() { //定义数组 int[] arr = { 80, 10, 5, 40, 60, 1, 20, 10 };
//开始快速排序 QuickMain(arr, 0, arr.Length - 1);
//转为字符串数组 string[] strArr = arr.Select(s => s.ToString()).ToArray();
//拼接字符串 string str = string.Join(",", strArr);
//打印字符串 Debug.Log(str); }
|