快速排序就是这么容易
愚昧者怨天尤人,无能者长吁短叹,儒弱者颓然放弃。
快速排序就是这么容易
快速排序算法是使用和做题频率很高的一种算法。
原理:(这块可以先跳过)
算法描述:
-
快速排序算法通过多次比较和交换来实现排序,其排序流程如下: -
首先设定一个分界值,通过该分界值将数组分成左右两部分。 -
将大于或等于分界值的数据集中到数组右边,小于分界值的数据集中到数组的左边。此时,左边部分中各元素都小于或等于分界值,而右边部分中各元素都大于或等于分界值。 -
然后,左边和右边的数据可以独立排序。对于左侧的数组数据,又可以取一个分界值,将该部分数据分成左右两部分,同样在左边放置较小值,右边放置较大值。右侧的数组数据也可以做类似处理。 -
重复上述过程,可以看出,这是一个递归定义。通过递归将左侧部分排好序后,再递归排好右侧部分的顺序。当左、右两个部分各数据排序完成后,整个数组的排序也就完成了。
(文字虽多,描述很清晰,仔细阅读)
动态图演示:
代码很简单清晰,仔细阅读
@Test
public void quSort(){
int[] arr = {3,1,5,2,4};
quickSort(arr, 0, arr.length - 1);
for (int i:arr
) {
System.out.println(i);
}
}
public int[] quickSort(int[] arr, int left, int right) {
if (left < right) {
int partitionIndex = partition(arr, left, right);
quickSort(arr, left, partitionIndex - 1);
quickSort(arr, partitionIndex + 1, right);
}
return arr;
}
public int partition(int[] arr, int left, int right) {
// 设定基准值(pivot)
int pivot = left;
int index = pivot + 1;
for (int i = index; i <= right; i++) {
if (arr[i] < arr[pivot]) {
swap(arr, i, index);
index++;
}
}
swap(arr, pivot, index - 1);
return index - 1;
}
public void swap(int[] arr, int i, int j) {
int temp = arr[i];
arr[i] = arr[j];
arr[j] = temp;
}
更多文章后面会持续分享,有特别需要可以提前留言。