java实现数据结构中的快速排序

java实现数据结构中的快速排序

个人理解

快速排序是指借用递归思想不断讲数组进行拆分排序,即选取任意一个元素作为改数组的中间元素,将该数组分为三部分:小于中间元素的数组;中间元素;大于中间元素的数组。
将小于中间元素的数组,大于中间元素的数组再次进行上述算法,反复进行拆分,直到最底层得到三个数据:小于中间元素的数组(只有一个小于中间元素的数据);中间元素;大于中间元素的数组(只有一个大于中间元素的数据),然后将无数类似于次情况的元素进行拼接(拼接方法体现递归思路),最终得到一个顺序大小的数组。

算法实现

首先建立一个可进行递归运算的算法,在此由于底层数组的拼接实在是太过于麻烦,所以博主采用了字符串拼接的方式,将字符串传入方法中,以","进行拆分得到一个字符串数组,然后将该数组转为int类型进行比较,完成区分开这三种情况,递归调用该方法,完成排序

private static String getQuick(String arr){//得到类似于"4,3,4,6,21,4"这样的字符串
    String[] str = arr.split(",");//拆分得到一个字符串类型的数组
    String min = "";//定义一个小于中间元素类数组字符串
    String max = "";//定义一个大于于中间元素类数组字符串
    String mid = str[str.length-1];//选取数组最后一位作为中间元素
    for(int i=0;i<str.length-1;i++){
    	/**
    	*将字符串进行遍历比较,将小于中间元素的数据拼接入min字符串
    	*将大于中间元素的数据拼接如max字符串
	**/
        if(Integer.parseInt(mid)>Integer.parseInt(str[i])){
            min+=str[i]+",";
        }else{
            max+=str[i]+",";
        }
    }
    if(min.length()>1) {//去除字符串最后一位","
        min = min.substring(0, min.length() - 1);
    }
    if(max.length()>1) {
        max = max.substring(0, max.length() - 1);
    }
    //递归调用当数组只剩一位的时候返回元素,不再进行继续调用,在这里使用”&“符号进行分隔,防止数据混乱
    return (min.length()>1?getQuick(min):min)+"&"+mid+"&"+(max.length()>1?getQuick(max):max);
}

//对于上面的方法进行处理,去除冗余的元素,还原出一个类似于"32,1,23,5,6"的数组
public static String getQuickF(String arr){
    String ojbk = getQuick(arr);
    String[] make = ojbk.split("&");
    String ret = "";
    for(int i=0;i<make.length;i++){
        if(!make[i].equals("")) {
            ret += make[i] + ",";
        }
    }
    return ret.substring(0, ret.length() - 1);
}

测试

测试方法

public static void main(String[] args){
   System.out.println(sort.getQuickF("65,34,11,32,41,66,45,87,98"));
}

测试结果

11,32,34,41,45,65,66,87,98
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值