Java语言实现快速排序

Java语言实现快速排序
快速排序的思想是:通过一趟排序将待排的记录划分为独立的两部分,称为前半区和后半区,其中,前半区中的关键字均不大于后半区记录的关键字,然后再分别对这两部分记录继续进行快速排序,从而使整个序列有序。
一趟快速排序的过程称为一次划分,具体做法是:附设两个位置指示变量i和j,它们的初值分别指向序列的第一个记录和最后一个记录。设枢轴记录(通常是第一个记录)的关键字为privot,则首先从j所指位置向前搜索,找到第一个关键字小于privot的记录时将该记录向前移到i指示的位置,然后从i所指的位置向后搜索,找到第一个关键字大于privot的记录时将该记录向后移动到j所指的位置,重复该过程直至i与j相等为止------------以上文字皆摘自软件设计师教程书中。

跳过文字,直接撸代码。为了方便理解,将上述文字中的i替换为start,j替换为end,privot替换为flag
//一趟快速排序的过程
 public static int procedure(Object[] arr,int start,int end){
        Object flag = arr[start];   //上述文字中描述的枢轴记录,通常是第一个记录即arr[start]
        Object temp = null;
        //start =end 时,一趟快速排序结束
        while(start < end){
            while(start < end && arr[end].hashCode() >= flag.hashCode()){
                end--;
            }
            temp = arr[start];
            arr[start] = arr[end];
            arr[end] = temp;
            while(start < end && arr[start].hashCode() <= flag.hashCode()){
                start++;
            }
            temp = arr[start];
            arr[start] = arr[end];
            arr[end] = temp;
        }
        //返回start值,start值为整个数组前半区和后半区的分隔坐标
        return start;
    }
//对数组进行快速排序
public static void quickSort(Object[] arr,int start,int end){
        if(start < end){
            int result = procedure(arr,start,end);
            //递归方式对前半区和后半区进行快速排序
            quickSort(arr,start,result-1);
            quickSort(arr,result+1,end);
        }
    }

测试

 public static void main(String[] args){
        Object[] arr = new Object[]{"Q","H","C","Y","P","A","M","S","R","D","F","X"};
        quickSort(arr,0,arr.length-1);
        System.out.println(Arrays.toString(arr));
    }

输出
[A, C, D, F, H, M, P, Q, R, S, X, Y]

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值