快速排序

算法——快速排序


@Author:云都小生


概述——理解快速排序



快速排序算法是一种比冒泡效率更高的算法,既剩时间有省空间。这个算法是由东尼霍尔提出的,后来有很多人进行了优化。

算法是这样的,一开始给定一个数列:{6,2,8,3,5,1,9,4,7,10}

开始的时候,我们选择一个数作为基准数,就选6吧。

接着,我们指定两个哨兵(i,j),它们一个指向这个数列的最左边,一个指向这个数列的最后边。

这里写图片描述

这个时候,先从右边开始,我们找到比6小的数,找到就停住,然后我们从左边开始找,找到比6大的数,找到就停住。接着我们交换他们的值。

这里写图片描述

直到这种情况:i==j 我们就直接吧a[i]/a[j]跟基准数交换,这个时候就已经把基数放到真正属于它的位置了。左边的数全部比它小,右边的数全部比它大。

这里写图片描述

接下来,只要重复上面的步骤,对左边和右边的数列进行排序就行了。


代码实现


import java.util.Arrays;

public class Test
{
    public static void main(String[] args) {
        int a[] = new int[]{6,2,8,3,5,1,9,4,7,10};
        quicksort(a,0,a.length-1);
        System.out.println(Arrays.toString(a));
    }

    public static void quicksort(int[] a,int left,int right)
    {
        int i,j,t,center;
        //递归返回
        if(left>right)
        {
            return; 
        }

        center=a[left]; //center存的是基准数 
        i=left; 
        j=right; 
        while(i!=j) 
        { 
            //顺序很重要,要先从右边开始找 
            while(a[j]>=center && i<j) 
            {
                 j--;
            }

            //再找右边的 
            while(a[i]<=center && i<j) 
            {
                i++;
            }

            //交换两个数在数组中的位置(前提是i != j) 
            if(i<j) 
            { 
                t=a[i]; 
                a[i]=a[j]; 
                a[j]=t; 
            } 
        } 
        //最终将基准数归位 
        a[left]=a[i]; 
        a[i]=center; 

        quicksort(a,left,i-1);//继续处理左边的,这里是一个递归的过程 
        quicksort(a,i+1,right);//继续处理右边的 ,这里是一个递归的过程 
    }
}

2017/10/30 16:34:36 @Author:云都小生

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值