每日一题快速排序
Posted 唐宋xy
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了每日一题快速排序相关的知识,希望对你有一定的参考价值。
题目
给定一组数据,需要对该组数据进行排序,需要保证排序的速度足够快
要求:空间复杂度要求O(N)
例如: arr = 10, 2, 8, 2, 3, 6, 6, 1
res = 1, 2, 2, 3, 6, 6, 8, 10
解析
只要其对数据进行排序,并且要求速度足够快,并且不要求稳定性,那么可以选择多种算法(也可以选择睡眠排序),那么这里就选择足够快的快速排序
快速排序: 时间复杂度 O(N*logN),空间复杂度O(logN)
代码实现
**快速排序思想:**先将整体数组大致排序,即将数组划分为 小于、等于、大于区域,然后对每个区域进行单独排序,对小于、大于区域继续划分,然后排序,重复上面的过程,直到最小的区域排好序,那么整体数组就有序
public static void sort(int[] arr)
if (arr == null || arr.length == 0)
return;
process(arr, 0, arr.length - 1);
private static void process(int[] arr, int L, int R)
if (L >= R)
return;
// 先划分数组,然后递归排序
int[] pivot = partition(arr, L, R);
process(arr, L, pivot[0] - 1);
process(arr, pivot[1] + 1, R);
private static int[] partition(int[] arr, int L, int R)
int less = L - 1;
int moreR = R;
while (L < moreR)
if (arr[L] < arr[R])
swap(arr, ++less, L++);
else if (arr[L] > arr[R])
swap(arr, L, --moreR);
else
L++;
swap(arr, moreR, R);
return new int[]less + 1, moreR;
private static void swap(int[] arr, int i, int j)
int temp = arr[i];
arr[i] = arr[j];
arr[j] = temp;
以上是关于每日一题快速排序的主要内容,如果未能解决你的问题,请参考以下文章