数据结构与算法之快速排序

古城微笑少年丶 2023-01-01 07:57 240阅读 0赞

时间复杂度平均O(nlogn)

  1. package com.qiangqiang.sort;
  2. import java.util.Random;
  3. public class QuickSort {
  4. public static void main(String[] args) {
  5. Integer[] arr = new Integer[9000000];
  6. for (int i = 0; i < 9000000; i++) {
  7. Random random = new Random();
  8. arr[i] = random.nextInt(99909900);
  9. }
  10. long l1 = System.currentTimeMillis();
  11. sort(arr);
  12. long l2 = System.currentTimeMillis();
  13. long l = l2 - l1;
  14. System.out.println("耗费:" + l + "毫秒");
  15. for (int i : arr) {
  16. System.out.print(i + ",");
  17. }
  18. }
  19. //对数组内元素进行排序
  20. public static void sort(Comparable[] a) {
  21. int lo = 0;
  22. int hi = a.length - 1;
  23. sort(a, lo, hi);
  24. }
  25. //对数组a中从索引lo到hi之间的元素进行排序
  26. public static void sort(Comparable[] a, int lo, int hi) {
  27. if (lo >= hi) {
  28. return;
  29. }
  30. //需要对数组中lo索引到hi索引的元素进行分组,(左子组和右子组)
  31. int partition = partition(a, lo, hi); //返回的是头元素最为排序基准排序后的索引
  32. //让左子组有序,让右子组有序,那么整个就有序了
  33. sort(a, lo, partition - 1);
  34. sort(a, partition + 1, hi);
  35. }
  36. //对数组a中,从索引lo到索引hi之间的元素进行分组,并返回分组界限对应的索引
  37. public static int partition(Comparable[] a, int lo, int hi) {
  38. Comparable key = a[lo];
  39. int left = lo;
  40. int right = hi + 1;
  41. while (true) {
  42. //先从右往左扫描,移动right指针
  43. while (comp(key, a[--right])) {
  44. if (right == lo) {
  45. break;
  46. }
  47. }
  48. //从左往右扫描,移动left指针
  49. while (comp(a[++left], key)) {
  50. if (left == hi) {
  51. break;
  52. }
  53. }
  54. if (left >= right) {
  55. break;
  56. } else {
  57. exchange(a, left, right);
  58. }
  59. }
  60. //交换分界值
  61. exchange(a, lo, right);
  62. return right;
  63. }
  64. //交换数据
  65. public static void exchange(Comparable[] a, int i, int j) {
  66. Comparable temp = a[i];
  67. a[i] = a[j];
  68. a[j] = temp;
  69. }
  70. public static Boolean comp(Comparable a, Comparable b) {
  71. return a.compareTo(b) < 0;
  72. }
  73. }

发表评论

表情:
评论列表 (有 0 条评论,240人围观)

还没有评论,来说两句吧...

相关阅读