算法设计与分析 2.81 快速排序
来源:百度文库 编辑:神马文学网 时间:2024/04/27 06:40:05
/**********************************************************
快速排序的运行时间与划分是否对称有关。
1.其最坏情况是在划分的过程中产生两个区域分别包含 1 个和
n - 1 个元素的时候。由于partition的计算时间为 O(n) , 所以
如果算法partition每次都出现这种不对称的划分,复杂度为O(n^2)。
2.最好和平均都是 O(nlogn) 。
**********************************************************/
import java.util.Arrays;
public class QuickSort {
public static void quickSort(int[] a, int p, int r) {
if (p < r) {
int q = partition(a, p, r);
quickSort(a, p, q - 1); //对左半段排序
quickSort(a, q + 1, r); //对右半段排序
}
}
快速排序的运行时间与划分是否对称有关。
1.其最坏情况是在划分的过程中产生两个区域分别包含 1 个和
n - 1 个元素的时候。由于partition的计算时间为 O(n) , 所以
如果算法partition每次都出现这种不对称的划分,复杂度为O(n^2)。
2.最好和平均都是 O(nlogn) 。
**********************************************************/
import java.util.Arrays;
public class QuickSort {
public static void quickSort(int[] a, int p, int r) {
if (p < r) {
int q = partition(a, p, r);
quickSort(a, p, q - 1); //对左半段排序
quickSort(a, q + 1, r); //对右半段排序
}
}
private static void swap(int[] a, int i, int j) {
int temp = a[i];
a[i] = a[j];
a[j] = temp;
}
private static int partition(int[] a, int p, int r) {
int u = a[p]; //以第一个元素为基准
int i = p + 1;
int j = r;
for (; ; ) { //将小于u的元素交换到左边,将大于u的元素交换到右边
while (a[i] < u) {
i++;
}
while (a[j] > u) {
j--;
}
if (i >= j) {
break;
}
swap(a, i, j);
}
a[p] = a[j];
a[j] = u;
return j;
}
public static void main(String[] args) {
int[] a = {3, 4, 1, 5, 9, 3, 2, 8, 10};
quickSort(a, 0, a.length - 1);
System.out.println(Arrays.toString(a));
}
}
算法设计与分析 2.81 快速排序
算法设计与分析 冒泡排序
快速排序算法
快速排序算法
快速排序算法
算法连载(2)--快速排序与插入排序的比较 - Compower Studio - CSD...
快速排序与快速选择算法(quick sort and quick select algor...
选择排序、快速排序、希尔排序、堆排序不是稳定的排序算法,而冒泡排序、插入排序、归并排序和基数排序是稳定的排序算法。
采用部分快速排序算法实现数组的部分排序
算法设计与分析 2.2 分治法基本思想
算法设计与分析 5.9 旅行售货员问题w
算法设计与分析 5.9 旅行售货员问题9090
排序算法
算法分析与设计之五大常用算法_算法_C/C++频道_中国IT实验室技术专题
采用部分快速排序算法实现数组的部分排序 - eaglet的专栏 - CSDN博客
采用部分快速排序算法实现数组的部分排序 - eaglet - 博客园
关于常见排序算法的稳定性分析和结论
关于常见排序算法的稳定性分析和结论
关于常见排序算法的稳定性分析和结论
算法:设计与择优1
计算名次与按名次排序问题的算法优化
快速排序
排序算法总结
排序算法小结