算法描述
快速排序是对冒泡排序的一种改进
通过一轮排序,将整个待排序列分割成独立的两部分,其中一部分的所有数据均比另一部分的数据小,然后以同样的方法,继续对这两部分进行排序,从而达到整个序列有序
- 首先任意选定一个分界值(通常选数组中间的数),通过该分界值将数组分成左右两部分
- 把 < 分界值 的数据都放到分界值的左边,把 >= 分界值 的数据都放到分界值的右边
- 分别对左右两部分重复步骤1,2,直到整个序列有序
步骤1,2 称作一趟快速排序,或一次划分
排序过程
代码实现
public class test {
public static void main(String[] args) {
int[] arr = {4, 3, 6, 1, 8, 5, 2, 7};
quickSort(arr, 0, arr.length - 1);
System.out.println(Arrays.toString(arr));
}
public static void quickSort(int[] arr, int left, int right) {
int mid = arr[(left + right) / 2]; // 将中间位置的数定义为分界值
int i = left, j = right;
int temp = 0;
do {
while (arr[i] < mid) i++; // 在左侧寻找比mid大的数
while (arr[j] > mid) j--; // 在右侧寻找比mid小的数
if (i <= j) {
temp = arr[i];
arr[i] = arr[j];
arr[j] = temp;
// 继续搜索
i++;
j--;
}
} while (i <= j);
if (left < j) quickSort(arr, left, j);
if (right > i) quickSort(arr, i, right);
}
}