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