基于java实现快速排序
import java.util.Arrays;
/**
* @desc 快速排序
* https://blog.youkuaiyun.com/zcxyywd/article/details/131024516
**/
public class QuickSort {
public static void quickSort(int arr[], int startIndex, int endIndex) {
//递归结束条件
if (startIndex >= endIndex) return;
//得到基准元素位置
int pIndex = partition(arr, startIndex, endIndex);
//基准元素,左右两部分进行递归
quickSort(arr, startIndex, pIndex - 1);
quickSort(arr, pIndex + 1, endIndex);
}
/**
* 双边循环法
* @param arr
* @param startIndex
* @param endIndex
* @return
*/
public static int partition(int arr[], int startIndex, int endIndex) {
int p = arr[startIndex];
int l = startIndex;
int r = endIndex;
while (l != r) {
//右指针向左移动,找到小于基准元素的那个数就停止
while (l<r && arr[r] > p) {
r--;
}
//左指针向右移动,找到大于基准元素的那个数就停止
while (l<r && arr[l] <= p) {
l++;
}
/**
* 交换l指针和r指针所指的元素
*/
if (l<r) {
int tmp = arr[l];
arr[l] = arr[r];
arr[r] = tmp;
}
}
//交换基准元素和重合点的元素
arr[startIndex] = arr[l];
arr[l] = p;
return l;
}
public static void main(String[] args) {
int arr[] = {4,7,6,5,3,2,8,1};
quickSort(arr, 0, 7);
System.out.println(Arrays.toString(arr));
}
}
参考链接