排序算法之快速排序(Java实现)

清疚 2022-01-05 07:15 354阅读 0赞

快速排序是一种交换排序,这种排序的思想是把数组通过不断的递归,把数组中的数据分成两部分,前半部分小于某一个数,后半部分大于这个数,接着再对这两部分分别使用这种思想进行交换排序。这种排序的重点在于理解:局部排好序,那么整体就排好序了。

那么,如何把数据分成两部分,这里有个简单的办法,每次取数组中的第一个下标为low=0的元素,作为基准temp,然后通过从数组末端下标为high开始找比他小的元素,如果找到,那么nums[low]=nums[high],这一步只是把高位上的元素移到低位,高位空出来,接着从低位开始找比temp大的元素,如果找到,则将刚才空出的高位填上这个低位的数据,nums[high]=nums[low],当low=high的时候,再将这个位置填上temp,nums[low]=temp,这时候数组中已经分成了两部分,下一次从这个位置两边开始递归。

  1. package com.xxx.algorithm.sort;
  2. public class QuickSort {
  3. public static void quickSort(int[] nums,int low,int high){
  4. if(low<high){
  5. int middle = getMiddle(nums, low, high);
  6. quickSort(nums, low, middle-1);
  7. quickSort(nums, middle+1, high);
  8. }
  9. }
  10. public static int getMiddle(int[] nums,int low,int high){
  11. int temp = nums[low];
  12. while(low<high){
  13. while(low<high && nums[high] > temp){
  14. high--;
  15. }
  16. nums[low] = nums[high];
  17. while(low<high && nums[low]<temp){
  18. low++;
  19. }
  20. nums[high] = nums[low];
  21. }
  22. nums[low] = temp;
  23. return low;
  24. }
  25. public static void main(String[] args) {
  26. int data[] = {5,2,3,4,1,7,9,8,6,0,120,100};
  27. quickSort(data, 0, 11);
  28. System.out.println();
  29. for(int i=0;i<data.length;i++){
  30. System.out.print(data[i]+" ");
  31. }
  32. }
  33. }

发表评论

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

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

相关阅读

    相关 排序算法快速排序

    同样的先上这张图  ![Center][] 下面分析交换排序之快速排序: 快速排序的思想是先选择一个基准元素(一般取第一个元素),然后对剩下的元素作两端遍历,左边找

    相关 排序算法快速排序

    快速排序的基本思想是:通过一趟排序将要排序的[数据分割][Link 1]成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行

    相关 排序算法快速排序Java实现

    快速排序是一种交换排序,这种排序的思想是把数组通过不断的递归,把数组中的数据分成两部分,前半部分小于某一个数,后半部分大于这个数,接着再对这两部分分别使用这种思想进行交换排序。

    相关 排序算法快速排序

    快速排序是一种高效的排序算法,它采用分而治之的思想,把大的拆分成小的,小的再拆分为更小的。 其原理是:对于给定的数组,通过一趟排序之后,将原序列分为两部分,其中前一部分的所