zoukankan      html  css  js  c++  java
  • java实现快速排序

    /**
     * 快速排序
     */
    public class QuickSort {
      public static void main(String[] args) {
        /**
         * 定义一个无序数列
         */
        int[] arr = {22,1,9,67,33,31,17};
        System.out.println("排序前:"+ Arrays.toString(arr));
        /**
         * 调用快速排序方法
         */
        quickSort(arr,0,arr.length-1);
        /**
         * 输出排序后结果
         */
        System.out.println("排序后:"+Arrays.toString(arr));
      }
    
      /**
       * 快速排序方法
       */
      static void quickSort(int[] arr,int leftIndex,int rightIndex){
        if (leftIndex < rightIndex){
          /**
           * 先挖坑填数调整数组
           */
          int i = AdjuestArray(arr,leftIndex,rightIndex);
          /**
           * 递归调用
           */
          quickSort(arr,leftIndex,i - 1);
          quickSort(arr,i + 1,rightIndex);
        }
      }
      /**
       * 快速排序方法之--挖坑填数
       * 待排序数组 arr
       * 左指针 leftIndex
       * 右指针 rightIndex
       */
      static int AdjuestArray(int[] a,int leftIndex,int rightIndex){
        int i = leftIndex;
        int j = rightIndex;
        /**
         * 假设数组中的左指针位置的数为第一个挖掉的数字
         */
        int x = a[i];
        //左指针小于右指针才有必要进行排序
        while (i < j){
          /**
           * 右指针从后往前找比挖掉的数字小或等于的数来填坑
           */
          while (i < j && a[j] >= x){
            //右指针左移
            j--;
            }
          if (i < j){
            //找到了比挖掉的数大的数a[j],就把a[j]挖掉来填第一个被挖掉的数的坑,a[j]就变成了新的坑
            a[i] = a[j];
            i++;
            /**
             * 左指针从左往右移动,找比挖掉的数大或等于的数字
             */
            while (i < j && a[i] <= x){
              //左指针右移
              i++;
            }
            if (i < j){
              //a[i]填入a[j]的坑,a[i]形成新的坑
              a[j] = a[i];
              j--;
            }
          }
        }
        //当i = j时,退出循环,将x填回最后的坑
        a[i] = x;
        return i;
      }
    }

    运行结果:

  • 相关阅读:
    TCP 登录实现代码
    网络编程步骤 乔老师整理
    网络编程步骤 乔老师整理
    UDP 编程 客服咨询回复
    UDP 编程 客服咨询回复
    利用java在服务器和客服端建立连接,进行通讯(代码实例)
    利用java在服务器和客服端建立连接,进行通讯(代码实例)
    InetAddress 类简介
    InetAddress 类简介
    Mysql并发时经典常见的死锁原因及解决方法
  • 原文地址:https://www.cnblogs.com/sinoaccer/p/12122026.html
Copyright © 2011-2022 走看看