zoukankan      html  css  js  c++  java
  • 快速排序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+" ");
            }
        }
    }
     

    运行结果:

  • 相关阅读:
    第四章:初识CSS3
    第三章:表单
    第二章:列表、表格与媒体元素
    人机猜拳
    类的无参方法
    javadoc
    类与对象
    vuex笔记
    vi 编辑器常用快捷键
    知识点笔记(二维数组排序、统计数组重复个数、)
  • 原文地址:https://www.cnblogs.com/cdlyy/p/12535695.html
Copyright © 2011-2022 走看看