• 快速排序java实现


    
    
    public class QuickSort {
        public static void quickSort(int[] arr, int left, int right){
            int temp;
         //要排序数组的起始位置
            int i = left;
         //要排序数组的结束位置
            int j = right;
         //当起始位置小于结束位置时,进行排序,否则不执行任何操作
            if (left < right){
                // temp存放基准数("枢轴"),此时相当于把基准数存到temp中了,然后arr[left]即arr[i]的位置就相当于空出来了
                temp = arr[left];
           // 下面这个循环完成了一趟排序,即数组中小于temp的元素放在左边,大于temp的元素放在右边。左边和右边的分界点就是temp的最终位置
                while (i != j){
                    // 先从右往左扫描,只要比temp大,j就向左移,直到找到一个比"枢轴"temp小的数
                    while (i < j && arr[j] > temp){ --j; }
              // 找到一个比temp小的数,判断一下如果左指针小于右指针(即i和j相对位置还满足前后关系)
                    if (i < j){
                        // 则把该数放到temp左边,即把arr[j]放到空出的arr[i]位置,现在arr[j]的位置空出了,然后再从左往右扫描
                        arr[i] = arr[j];
                        // i指针右移一位(开始从左边扫描)
                        i++;
                    }
                    // 再从左往右扫描,只要比temp小,i就向右移,直到找到一个比"枢轴"temp大的数
                    while (i < j && arr[i] < temp){ ++i; }
              // 找到一个比temp大的数,判断一下如果左指针小于右指针(即i和j相对位置还满足前后关系)
                    if (i < j){
                        // 则把该数放到temp右边,把该数arr[i]放到上次空出的arr[j]位置,然后再从右往左扫描
                        arr[j] = arr[i];
                        // j指针左移一位(又开始从右边扫描)
                        j--;
                    }
                }
                // 当i==j时,将一开始存好的"枢轴"temp放在最终位置(把数组分成两部分了),一趟快速排序完成
                arr[i] = temp;
                // temp的左边部分再进行快速排序(依次递归实现)
                quickSort(arr, left, i-1);
           // temp的右边部分再进行快速排序(依次递归实现)
                quickSort(arr, i+1, right);
            }
        }
    
        public static void main(String[] args){
            int[] arr = {4,6,7,1,2,3,5};
            quickSort(arr, 0, arr.length-1);
            for (int a : arr){
                System.out.print(a+" ");
            }
        }
    }
     

    运行结果:

  • 相关阅读:
    币值转换
    第八周作业
    第七周作业
    第五周编程总结
    第四周编程总结
    第三周编程总结
    7-1 查找整数
    7-2 求最大值及其下标
    秋季学习总结
    对我影响最大的三个老师
  • 原文地址:https://www.cnblogs.com/cdlyy/p/12535695.html
Copyright © 2020-2023  润新知