当前位置:   article > 正文

java实现数组的快速排序_使用快速排序算法排序数组 java

使用快速排序算法排序数组 java

快速排序

    它的基本思想是:通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列

基本步骤为:
1.设定关键字,划分成两个数组,比关键字小的放在一边,大的放在另一边
2.我们选择设置数组最右端为关键字

3.递归实现快速排序,通过递归给每一个子数组快速排序

我们看个例子:

    有一组int类型数据:arr[ 6 ] = { 9 ,2 ,7 ,3 ,8 ,6 } ;

    那么进行快速排序时候:

    首先设置两个指针,从最左和最右向中间靠拢,遇到比关键字大(小)就停,然后交换位置,再继续向中间靠拢。获得排序切入点(第 i 个位置)。

    第一轮:6为关键字,进行分割数组(并不排序):(大括号里的是子串)

                {2,3}和{9,7,8}然后把6插入到中间第 i (2)位上,

         结果:{2,3},6,{9,7,8}

    第二轮:从0开始到 i 进行一次快排(选取3作为关键字);从 i +1到 arr.length - 1进行快排(选8关键字)

         结果:{2},3,6,{7},8,{9}

    第三轮结果:对3个子串再快排(同上)

         结果:2,3,6,7,8,9

快排完成。

那么接下来代码实现:(java)

  1. //快速排序
  2. //划分成两个数组,通过递归给每一个子数组快速排序
  3. //1.设定关键字,比关键字小的放在一边,大的放在另一边
  4. //2.设置数组最右端为关键字
  5. //3.递归实现快速排序
  6. public class QuickSort {
  7. //划分数组
  8. public static int part(long[] arr , int left , int right , long point) {
  9. //两个指针
  10. int leftptr = left - 1;
  11. int rightptr = right;
  12. while(true) {
  13. //从最左和最右开始找,比point大的放右边,比point小的放左边
  14. while(leftptr < rightptr && arr[++leftptr] < point);
  15. while(leftptr < rightptr && arr[--rightptr] > point);
  16. //找到后交换,然后再继续找
  17. if(leftptr >= rightptr) {
  18. break;
  19. }
  20. else {//交换
  21. long tmp = arr[leftptr];
  22. arr[leftptr] = arr[rightptr];
  23. arr[rightptr] = tmp;
  24. }
  25. }
  26. //数组分割完毕,把关键字插入中间
  27. long tmp = arr[leftptr];
  28. arr[leftptr] = arr[right];
  29. arr[right] = tmp;
  30. //返回切入点位置
  31. return leftptr;
  32. }
  33. public static void sort(long[] arr , int left , int right) {
  34. if (right <= left) {
  35. return;
  36. }
  37. else {
  38. //设置最右为关键字
  39. long point = arr[right];
  40. //获得切入点同时划分
  41. int part = part(arr, left, right, point);
  42. //递归对左边数组排序
  43. sort(arr, left, part - 1);
  44. //右边排序
  45. sort(arr, part + 1, right);
  46. }
  47. }
  48. //打印数组
  49. public static void displayArr(long[] arr) {
  50. for(int i = 0 ; i < arr.length ; i++) {
  51. System.out.print(arr[i] + " ");
  52. }
  53. System.out.println();
  54. }
  55. }

test类:这里选取随机生成10个数字进行排序

  1. public class TestQuickSort {
  2. public static void main(String[] args) {
  3. // TODO 自动生成的方法存根
  4. long[] arr = new long[10];
  5. for(int i = 0 ; i < arr.length ; i++) {
  6. arr[i] = (long) (Math.random() * 99);
  7. }
  8. long point = arr[arr.length - 1];
  9. QuickSort.displayArr(arr);
  10. // QuickSort.part(arr, 0, arr.length - 1, point);
  11. // QuickSort.displayArr(arr);
  12. QuickSort.sort(arr, 0, arr.length - 1);
  13. QuickSort.displayArr(arr);
  14. }
  15. }

 

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/盐析白兔/article/detail/449228
推荐阅读
相关标签
  

闽ICP备14008679号