欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

java中的快速排序

程序员文章站 2022-03-16 19:19:40
...

快速排序优点:相对于冒泡排序、选择排序、插入排序,在处理数据较多的情况下,更加省时、迅速

快速排序原理(以数组、升序为例):创建一个方法,升序排序数组

选择数组第一个数为临界值A,再从数组最后一位开始往左找,依次寻找,找到第一个比临界值小的。如果没有找到比临界值小的,那么临界值A最小,位置确定在数组第一位,该数字的右边都是比他大的数字,再调用方法,将该数组中剩余的数字进行排序。如果找到了比临界值小的数B,那么再从临界值的位置开始往右找,找到第一个比临界值大的数,如果直到找到了B的位置,也没找到比A大的数,A的位置确定,那么A与B互换位置,那么临界值与上述找到的最小值换换位置;如果找到了比A大的数C,那么将B与C互换位置,在继续从C的位置往左找下一个比A小的数,在从B的位置往右找下一个比A大的数,最终会确定A的位置,A的左边都是比它小的数,右边都是比它大的数,以A的位置为分隔,数组分成两个部分,在分别调用方法对着两个部分排序。

集体实现代码如下:

import java.util.Arrays;
public class QuickSort {
    //快速排序,相对于冒泡排序,更加省时、迅速。
    public void sort(int[] array,int left,int right){
        int l,r; //用于储存左右索引的值
        //left为数组array左边的索引值,其对应的值为临界值,right为数组右边的索引值
        if(left>right){return;}
        l=left;
        r=right;
        while(l<r){
            while(array[left]<=array[r]&&l<r){r--;}//从右边开始往左找到一个比临界值小的数,否则r自减
            while(array[left]>=array[l]&&l<r){l++;}//从左边开始往右找到一个比临界值小的数,否则l自加
            if(r>l){
                int temp01=array[r];
                array[r]=array[l];
                array[l]=temp01;
            }else if(r==left){break;}
            else{
                int temp02=array[l];
                array[l]=array[left];
                array[left]=temp02;
            }
        }
        sort(array,left,l-1);//左边部分
        sort(array,l+1,right);//右边部分
    }

    public static void main(String[] args) {
        //创建对象
        QuickSort q=new QuickSort();
        //静态创建数组
        int[] array={23,16,18,19,54,16,10,47,28,1,9,85,9};
        System.out.println("原始数组:"+Arrays.toString(array));
        //利用对象调用排序方法
        q.sort(array,0,array.length-1);
        System.out.println("排序后数组:"+Arrays.toString(array));
    }
}

执行结果如下:

java中的快速排序

 

相关标签: java 快速排序