算法学习(五)——快速排序

淡淡的烟草味﹌ 2022-07-12 06:46 219阅读 0赞

算法学习(五)——快速排序

通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列。(摘自百度百科)

首先快速排序的性能很好,但是快速排序是不稳定的。

问题:给定数组,进行排序。

方法:以数组的第一个元素作为特殊元素,每一次的目的是把数组中大于特殊元素的放在右边,小于特殊元素的放在左边,然后分别对左右两边的数组进行递归操作。

实现:

  1. package com.xueyou;
  2. /**
  3. * Created by Administrator on 2017/2/14.
  4. */
  5. public class QuickSort {
  6. /**
  7. * 打印数组
  8. *
  9. * @param a
  10. */
  11. static void printArray(int[] a) {
  12. for (int num : a) {
  13. System.out.print(num + "\t");
  14. }
  15. System.out.println("");
  16. }
  17. static void quickSort(int[] a, int low, int high) {
  18. int i = low;
  19. int j = high;
  20. int k = a[i];
  21. while (i < j) {
  22. //把小于关键数据的放在左边
  23. while (i < j && a[j] >= k) {
  24. j--;
  25. }
  26. if (i < j) {
  27. int temp = a[j];
  28. a[j] = a[i];
  29. a[i] = temp;
  30. printArray(a);
  31. }
  32. //把大于关键数据的放在右边
  33. while (i < j && a[i] <= k) {
  34. i++;
  35. }
  36. if (i < j) {
  37. int temp = a[j];
  38. a[j] = a[i];
  39. a[i] = temp;
  40. printArray(a);
  41. }
  42. }
  43. if (low < i - 1) {
  44. quickSort(a, low, i - 1);
  45. }
  46. if (high > i + 1) {
  47. quickSort(a, i + 1, high);
  48. }
  49. }
  50. public static void main(String[] args) {
  51. int[] a = {6, 3, 1, 7, 9, 4, 6, 2};
  52. printArray(a);
  53. System.out.println("============排序中================");
  54. quickSort(a, 0, a.length - 1);
  55. System.out.println("============排序中================");
  56. printArray(a);
  57. }
  58. }

运行结果:

Center

具体的排序过程如下:

Center 1

发表评论

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

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

相关阅读

    相关 排序算法——快速排序

    排序算法——快速排序 > 快速排序通过一趟排序将待排序序列分隔成独立的两部分,其中一部分序列的关键字均比另一部分的关键字小,则可分别对这两部分记录继续进行排序,以达到整个

    相关 排序算法---快速排序

    基本思路: 快速排序,数组冲两边出发。 首先取一个关键字。 在第一次排序后。 大于和小于 关键字的各在 关键字两边。 然后在对两边 重复上面步骤,取关键字,排序。 直