zoukankan      html  css  js  c++  java
  • Java 算法之快速排序

     /*
      * 快速排序:选一个值pivokey(一般是第一个),小于pivokey放在左边,大于pivokey放在右边,分成两个序列,递归直到low >= high
      * 步骤:
      * 1,设定两个指针low,high。初值是0和数组长度-1,指定关键字pivokey
      * 2,从high所指的位置向前找,找到一个比pivokey小的,和关键字交换值(arr[low] = arr[high])
      * 3,从low所指的位置向后找,找到一个比pivokey大的,和关键字交换值
      * 4,直到low>=high,把关键字赋值arr[low]=pivokey
      * 5,递归分出的两个序列[lowStart,low-1]  [low+1,highEnd]
      * */
      public class QuickSortTest2{
      public static int[] quickSort(int[] arr, int low, int high) {
      //为后面的递归使用
      int lowStart = low;
      int highEnd = high;
      if (low < high) {
       int pivokey = arr[low];
       while (low < high) {
        //如果都是大于pivokey,high指针往前移
        while (low < high && arr[high] > pivokey) {
         high--;
        }
        //这里low++是先把arr[low]赋值为arr[high],再low+=1,因为这个值是比pivokey小的,下一次不用比较了
        if (low < high)
        arr[low++] = arr[high];
        //如果都是小于pivokey,low指针往后移
        while (low < high && arr[low] < pivokey) {
         low++;
        }
        //这里的high--和上面同理
        if (low < high)
        arr[high--] = arr[low];
       }
       arr[low] = pivokey;
       quickSort(arr, lowStart, low - 1);
       quickSort(arr, low + 1, highEnd);
      }
      return arr;
     }
     public static void main(String[] args){
      int[] a={2,1,4,5,7,1,9,3};//等待排序的数组值可以有重复
      for(int a1: a) 
            { 
                System.out.print(a1 + "    "); 
            } 
      System.out.println();
            int index = a.length; 
            a=QuickSortTest2.quickSort(a,0,a.length-1); // qucikly sort 
      for(int a1: a) 
            { 
                System.out.print(a1 + "    "); 
            }
     }
    }

  • 相关阅读:
    地址栏访问Action,后来方法执行两次
    转:Android中的Selector的用法
    转:android 自定义RadioButton样式
    Android中@id与@+id区别
    INSTALL_PARSE_FAILED_MANIFEST_MALFORMED 错误
    Supervisor
    mysql 赋予权限连接
    定时任务
    git 提交代码五部曲
    Mysql 之事物
  • 原文地址:https://www.cnblogs.com/sunflower627/p/2910881.html
Copyright © 2011-2022 走看看