快速排序(Java版)

作者:追风剑情 发布于:2018-10-20 12:25 分类:Algorithms

  1. public class QuickSortTest{
  2. public static void main(String[] args){
  3. int arr[] = {3, 1, 5, 4, 2, 6};
  4. System.out.println("原数据:");
  5. printArr(arr);
  6. System.out.println("快速排序过程:");
  7. quickSort(arr, 0, arr.length-1);
  8. System.out.println("快速排序结束:");
  9. printArr(arr);
  10. }
  11. public static void quickSort(int[] arr, int p, int r)
  12. {
  13. if (p >= r) //结束递归
  14. return;
  15. int q = partition(arr, p, r);
  16. printArr(arr);
  17. quickSort(arr, p, q-1); //对左侧排序
  18. quickSort(arr, q+1, r); //对右侧排序
  19. }
  20. /**
  21. * 将主元arr[r]放到合适的位置
  22. * @return 返回主元所在的新位置
  23. */
  24. public static int partition(int[] arr, int p, int r)
  25. {
  26. int x = arr[r];//主元
  27. int i = p;
  28. for (int j=p; j<r; j++)
  29. {
  30. if (arr[j] <= x) {
  31. exchange(arr, i, j);
  32. i++;
  33. }
  34. }
  35. //将主元放入正确的位置
  36. //此时,主元左侧的数据都小于主元,主元右侧的数据都大于主元
  37. exchange(arr, i, r);
  38. return i;
  39. }
  40. /**
  41. * 将第r号元素插入到i号位置,其它元素依次后移
  42. */
  43. public static void exchange(int[] arr, int i, int r)
  44. {
  45. if (i>=r)
  46. return;
  47. int x = arr[r];
  48. for (int j=r; j>i; j--)
  49. {
  50. arr[j] = arr[j-1];
  51. }
  52. arr[i] = x;
  53. }
  54. /**
  55. * 打印数组
  56. */
  57. public static void printArr(int[] arr)
  58. {
  59. for (int i=0; i<arr.length; i++)
  60. {
  61. System.out.print(arr[i]);
  62. System.out.print(" ");
  63. }
  64. System.out.println();
  65. }
  66. }

运行测试

1111.png

标签: Algorithms

Powered by emlog  蜀ICP备18021003号-1   sitemap

川公网安备 51019002001593号