文章目录
快速排序
在前面,我们了解到了快速排序的思想,详情链接可见:快速排序。其实,快速排序也可以看作是分治策略的一种算法模式,根据快速排序的思想,我们可以实现许多实际中的应用问题。下面,我们来看看这些问题该如何实现。
首先,我们来回顾一个快速排序的实现过程,其中最重要的一步操作就是快速排序中的划分操作。
快速排序的划分操作实现
/**
* 快速排序的划分过程
*/
public static int Partition(int[] arr, int left, int right) {
int temp = arr[left];
while (left < right) {
while (left < right && arr[right] > temp) {
right--;
}
if (left < right) {
arr[left] = arr[right];
}
while (left < right && arr[left] < temp) {
left++;
}
if (left < right) {
arr[right] = arr[left];
}
}
arr[left] = temp;
return left;
}
有了划分操作后,我们就可以进行快速排序了。具体排序思想可以参考链接:快速排序。
快速排序的实现
快速排序的递归实现
/**
* 递归方法实现快速排序
*/
public static void quickSort(int[] arr, int left, int right) {
if (left < right) {
int pos = Partition(arr, left, right);
quickSort(arr, left, pos - 1);
quickSort(arr, pos + 1, right);
}
}
快速排序的非递归实现
- 通过队列实现快速排序。
/**
* 非递归方法实现快速排序
*/
public static void niceQuickSort(int[] arr, int left, int right) {
Queue<Integer> qu = new LinkedList<Integer>();
qu.offer(left);// left , right
qu.offer(right);
while (!qu.isEmpty()) {
left = ((LinkedList<Integer