java常用算法之快速排序详解

来源:互联网 发布:匡恩网络女副总裁 编辑:程序博客网 时间:2024/06/04 20:00
package com.kero99.ygc.quickSort;public class QuickSort {    /**     * 快速排序 类似于冒泡排序 基于交换排序的思想 对冒泡排序进行改进 提高了执行效率     * 设定一个分界值 将数组分为左右俩部分 大于等于分界值放到数组右边 小于的值放到数组左边     * 左右两边数据可以独立排序 同样左边放较小的 右边放较大的       * @param arr     * @param left     * @param right     */    // private static final int SIZE = 18;    public void quickSort(int[] arr,int left,int right){//快速排序算法         int f,t;        int rtemp,ltemp;        ltemp=left;        rtemp=right;        f=arr[(left+right)/2];//分界值   当前数组则为30        while(ltemp<rtemp) //左边的值小于右边的 0 - 4        {            while(arr[ltemp]<f){//左边的小于分界值 下标++                ++ltemp;                    }            while(arr[rtemp]>f){//右边的大于分界值 下标--                --rtemp;            }            if(ltemp<=rtemp){                t=arr[ltemp];                arr[ltemp]=arr[rtemp];                arr[rtemp]=t;                --rtemp;                ++ltemp;            }        }        if(ltemp==rtemp){            ltemp++;        }        if(left<rtemp){            quickSort(arr,left,ltemp-1);        }        if(ltemp<right){            quickSort(arr,rtemp+1,right);        }    }    public static void main(String[] args) {        int[] s={20,123,30,555,1000};        QuickSort qs=new QuickSort();        qs.quickSort(s, 0, s.length-1);        for(int i=0;i<s.length;i++){            System.out.println(s[i]);        }//      int[] shuzu=new int[SIZE];//      int i;//      for(i=0;i<SIZE;i++){//          shuzu[i]=(int)(100+Math.random()*(100+1));//      }//      QuickSort qs=new QuickSort();//      System.out.println("排序前");//      for(i=0;i<SIZE;i++){//          System.out.print(shuzu[i]+" ");//      }//      System.out.print("\n");//      System.out.println("排序后");//      qs.quickSort(shuzu,0,SIZE-1);//      for(i=0;i<SIZE;i++){//          System.out.print(shuzu[i]+" ");//      }//      System.out.print("\n");    }}