快速排序不同输入规模时间复杂度分析
2011-06-17 00:14
537 查看
import java.util.Random; public class QuickSort { public static void quickSort(int[] a, int low, int high) { int i, j; int temp; i = low; j = high; temp = a[low]; // 取第一个元素为标准数据元素 while (i < j) { // 在数组的右端扫描 while (i < j && temp <= a[j]) j--; if (i < j) { a[i] = a[j]; i++; } // 在数组的左端扫描 while (i < j && a[i] < temp) i++; if (i < j) { a[j] = a[i]; j--; } } a[i] = temp; if (low < i) quickSort(a, low, i - 1); // 对左端子集合递归 if (i < high) quickSort(a, j + 1, high); // 对右端子集合递归 } public static void main(String[] args) { long mid = 0L; int all = 100000; for (int n = 1; n <= 10; n++) { int[] test = new int[n * 100]; Random rand = new Random(47); for (int j = 0; j < all; j++) { for (int i = 0; i < n * 100; i++) test[i] = rand.nextInt(10000); long startTime = System.nanoTime(); quickSort(test, 0, n * 100 - 1); long endTime = System.nanoTime(); mid += endTime - startTime; } mid /= all; System.out.println("" + n * 100 + ":" + mid); } } }
结果(纳秒):
100:8348
200:16798
300:25641
400:35086
500:44519
600:54011
700:63657
800:73646
900:84248
1000:94609
注:不同机器以及同一机器在不同时刻得到时间都是有差别的
相关文章推荐
- 快速排序和冒泡排序的时间复杂度分析(C++算法实现对比)
- MIT:算法导论——4.2快速排序 以及 排序算法时间复杂度分析
- 快速排序改进版,时间复杂度为:O(nk+nlog(n/k))
- C语言-斐波那契(Fibonacci)数列三种不同求法时间复杂度分析
- 快速选择(QuickSelect)的平均时间复杂度分析
- 选择排序的时间复杂度分析
- 快速排序最好,最坏,平均复杂度分析
- 用不同的数据结构实现 优先队列 的时间复杂度分析
- 时间复杂度为O(N*logN)的排序算法——归并排序、快速排序、堆排序
- 归并排序及其时间复杂度分析
- 14.输入一个已经按升序排序过的数组和一个数字, 在数组中查找两个数,使得它们的和正好是输入的那个数字。 要求时间复杂度是O(n)
- 【练习】输入一个已经按升序排序过的数组和一个数字sum,在数组中查找两个数,使得它们 的和正好是输入的那个数字sum,要求时间复杂度为O(n)
- 选择排序的时间复杂度分析
- 快速排序时间复杂度为O(n×log(n))的证明
- 快速排序:源码(C++)--伪代码--时间复杂度解析
- 二分法查找和快速排序 二分法是分治算法的一种特殊形式,利用分治策略求解时,所需时间取决于分解后子问题的个数、子问题的规模大小等因素,而二分法,由于其划分的简单和均匀的特点,是查找数据时经常采用的一种有
- 快速排序时间复杂度为O(n×log(n))的证明
- 找包含N个元素的数组里第K大的元素(引申:快速排序、找中位数、找前K大的元素)的时间复杂度
- 归并排序、快速排序---时间复杂度为O(nlog n)的排序方式
- 快速排序的实现与时间复杂度