排序整理——快速排序

   快速排序,顾名思义,是一种速度快,效率高的排序算法。

   快排原理:         

           在要排的数(比如数组A)中选择一个中心值key(比如A[0]),通过一趟排序将数组A分成两部分,其中以key为中心,key右边都比key大,key左边的都key小,然后对这两部分分别重复这个过程,直到整个有序。      

           整个快排的过程就简化为了一趟排序的过程,然后递归调用就行了。         

          一趟排序的方法:

               1,定义i=0,j=A.lenght-1,i为第一个数的下标,j为最后一个数下标;

               2,从数组的最后一个数Aj从右往左找,找到第一小于key的数,记为Aj;

               3,从数组的第一个数Ai 从左往右找,找到第一个大于key的数,记为Ai;

               4,交换Ai 和Aj 

               5,重复这个过程,直到 i=j

               6,调整key的位置,把A[i] 和key交换

package sort;
import java.util.Arrays;
public class QuickSort{
    public static void main(String[]args) {
        int a[]= {25,24,12,76,101,96,28};
        System.out.println("原数组为:"+Arrays.toString(a));
        quicksort(a);
        System.out.println("排序后为:"+Arrays.toString(a));    
    }
    //确保不是空数组
    public static void quicksort(int a[]) {
        if(a.length>0) {
            quicksort(a, 0, a.length-1);
        }
    }
    private static void quicksort(int a[],int low,int high) {
        //递归出口
        if(low>high) {
            return;
        }
        int i=low;
        int j=high;
        int key=a[low];
        while(i<j) {
            //从右到左找出比Key小的数
            while(i<j&&a[j]>key) {
                j--;
            }
            //从左到右找出比key大的数
            while(i<j&&a[i]<=key) {
                i++;
            }
            //交换a[i]和a[j]
            if(i<j) {
                int t=a[i];
                a[i]=a[j];
                a[j]=t;
            }
            //调整Key的位置
            int t=a[low];
            a[low]=a[i];
            a[i]=t;
            quicksort(a, i+1, high);//对右边的序列进行排序
            quicksort(a, low, i-1);//对左边的序列进行排序
        }
    }
}

运行结果:

   (原文:https://blog.csdn.net/Yexiaofen/article/details/78018204?utm_source=copy)

猜你喜欢

转载自blog.csdn.net/Marmara01/article/details/82823909