[JAVA]快速排序

来源:互联网 发布:淘宝登陆不了怎么回事 编辑:程序博客网 时间:2024/06/10 16:31
package sort_book_datastruction;import java.util.ArrayList;import java.util.Arrays;/** * 快速排序: * 基本思想:通过一趟排序将待排序列分割成两部分,其中一部分记录的关键字比另一部分记录的关键字小, *        则可以分别对两部分记录继续进行排序,以达到整个序列有序; *        每一趟能够将枢轴元素放在正确的位置上。 *具体做法:附设两个指针low和high,他们的初值分别是low和high,设枢轴记录的关键字为pivotkey, *       则首先从high所指的位置起向前搜索找到第一个关键字小于pivotkey的记录和枢轴互相交换, *       然后从low所指的位置起向后搜索,找到第一个关键字大于pivotkey的记录和枢轴互相交换, *       重复这两步,直至low=high为止; *改进:每交换一对记录需进行三次记录赋值操作,而实际过程中对枢轴记录的赋值是多余的,因为只有一趟排序结束时,即 *    low=high的位置才是枢轴记录的最后位置。 * @author Administrator * */public class QuikSort {//  public  void swap(int[] array,int low,int high){//      int temp = array[low];//      array[low] = array[ high];//      array[high] =temp;//  }       public  int getMiddle(int[] array,int low ,int high){        if(array.length <=0)            return -1;        int pivotkey = array[low];//用子表的第一个记录作为基准元素        while(low<high){            //从表的两端交替的向中间扫描            while(low<high&&array[high]>=pivotkey)                high--;                //swap(array,low,high);                array[low]=array[high];//改进的方法;将比枢轴记录小的记录移动到低端;            while(low<high &&array[low]<=pivotkey)                low++;                //swap(array,low,high);                array[high]=array[low];//将枢轴记录大的记录移动到高端;        }        array[low] = pivotkey;//枢轴记录到位;        return low;    }    public  void Qsort(int[] array,int low,int high){        if(low<=high){//长度大于1            int pivotloc = getMiddle(array,low,high);//将顺序表array一分为2            Qsort(array,low,pivotloc-1);//对低子表做递归排序            Qsort(array,pivotloc+1,high);//对高子表做递归排序            }    }    public static void main(String[] args) {        // TODO Auto-generated method stub        QuikSort qs = new QuikSort();        int[] array = {49,38,65,97,76,13,27,49};        qs.Qsort(array, 0, array.length-1);        System.out.println("QUickSort:"+Arrays.toString(array));    }}
原创粉丝点击