快排算法
快速排序是(挖坑法)是挖坑填数 + 分治来实现
// j负责找坑,i负责填坑(先找坑,再填坑,所以先让j左移,找出一个坑位)
// i一开始指向基准元素,有坑了i才会去填坑(右移),i填坑后仍指向一个小元素。
// j保证后面全是大元素,i保证前面全是小元素,j与i相遇在一个小元素(因为j先左移,所以j先到达相遇位置)。最后替换相遇位置元素和基准元素
private static void QuickSort(int[] num, int left, int right){ // 如果left=right,即数组中只剩一个元素时,直接返回 if (left >= right){ return; } // 设置最左边的元素为基准值 int key = num[left]; // 数组中比key小的放在左边,比key大的放在右边 int i = left; int j = right; while (i < j){ // j向左移动,直到碰到比key小的数 while (num[j] >= key && i<j){ j--; } // i向右移动,直到碰到比key大的数 while (num[i] <= key && i<j){ i++; } // i和j指向的元素交换 if (i < j){ int temp = num[i]; num[i] = num[j]; num[j] = temp; } } num[left] = num[i]; num[i] = key; QuickSort(num, left, i-1); QuickSort(num, i+1, right); }