快速排序的java实现

快速排序的java实现

package Sort;

/*

 * 简单的讲快速排序就是一个分治的过程

 * 此代码中以首个元素为基准,通过getPiv查找到基准元素的准确位置,将整个数组分成左边全是小于基准元素右边全是大于基准元素的数组

 * 递归对左边和右边的子数组进行快速排序

 */

public class QucikSort {

public static void quicksort(int arr[],int left,int right)

{   int pivo;

if(left<right)  //  这一个很重要,掉了这个犯了一个栈溢出的错误,其实只有当right-left>3时采用快排才是有效的

{

pivo=getPiv(arr,left,right);   //获得基准元素在数组中的准确位置

quicksort(arr,left,pivo-1);

quicksort(arr,pivo+1,right);

}

}

    public static int getPiv(int arr[],int left,int right)

    {

    int pivokey=arr[left];  //以首个元素作为基准元素

    while(left<right)   //  当left==right处,pivokey在数组中的准确位置找到

    {

    while(left<right && arr[right]>=pivokey)

    right--;   // 从右边开始查找第一个小于基准元素的元素位置

    if(left<right)

    {arr[left++]=arr[right];  //  将右边查找到的小于基准元素的元素移动到左边的left位置处,同时left++

    

    }

    while(left<right && arr[left]<=pivokey) 

    left++;    //  从左边的left开始查找第一个大于基准元素的元素位置

    if(left<right)

    {

    arr[right--]=arr[left];  // 将左边的大于基准元素的元素值移动到右边right处

    

    }

    }

    arr[left]=pivokey;  // pivokey移动到准确的位置,(left==right)

    return left;  //  同时返回基准元素的位置

    }

 

    public static void print(int ary[])  //  实现数组的输出

{

int n=ary.length;

for(int i=0;i<n-1;i++)

System.out.print(ary[i]+" ");

System.out.println(ary[n-1]);

}

public static void main(String args[])

{

int arr[]={3,5,7,9,6,4,2,1,8,10,13,16,15,14};

quicksort(arr,0,13);

print(arr);

}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值