第五种排序算法:快速排序
原理:就是给基准数找到正确的索引位置,就是把比基准数小的元素放在左边,把比基准数大的元素放在右边,
然后在采用递归的方式对前半部分和对后半部分都进行排序,如果前后都有顺序,那么整个数组都有顺序了。
/*
* 15 23 78 45 10 6
* 假设第一个元素当做基准数temp=15;
* 设置连个指针begin表示开始的位置,end表示结尾的位置
* begin end
* 15 23 78 45 10 6
* 先从后开始 如果指定元素>基准数 ,让end-1,
* 如果指定元素<基准数,将end这个位置的值赋值给begin位置的值
* 6 23 78 45 10 6
*
* 再从前开始扫描 如果指定元素<基准数,让begin+1
* 如果指定元素>基准数,将begin位置的值赋值给end位置
* begin end
* 6 23 78 45 10 23
* ... 第二次 先扫描后面 再扫描前面
* begin end
* 6 10 78 45 78 23
* 经过很多次比较begin==end时 这个位置一定是基准数的
* begin==end
* 6 10 15 45 78 23
*
* 最后使用递归 前基准数前半部分和后半部分 再进行刚才的比较
* 只要前后都有顺序 整个数组就有顺序了
*
*
* 递归:相当于套娃,自己调用自己,并且有一个结束条件
*/
public static void main(String[] args) {
// int result= myMath(3);
// System.out.println("结果:"+result);
int[] nums={15,23,78,45,10,6};
quickSort(nums,0,nums.length-1);
System.out.println(Arrays.toString(nums));
}
//通过递归实现阶乘
// public static int myMath(int n){
if(n==1)return 1;
return n*myMath(n-1);
int[] nums={15,23,78,45,10,6};
//
// }
//定义一个方法 实现快速排序
public static void quickSort(int[] nums,int begin,int end){
if(begin<end) {//递归的 结束条件
//先找基准下标
int index = getIndex(nums, begin, end);
//对前半部分递归
quickSort(nums, begin, index - 1);
//在对后半部分递归
quickSort(nums, index + 1, end);
}
}
//定义一个方法 实现给基准数找到正确的下标
public static int getIndex(int[] nums,int begin,int end){
//设置基准数 假设是第一个元素
int temp=nums[begin];
while (begin<end){
//模拟每次的比较过程
while (begin<end&&nums[end]>=temp){
end--;
}
nums[begin]=nums[end];
while (begin<end&&nums[begin]<=temp){
begin++;
}
nums[end]=nums[begin];
}
//跳出循环表示begin==end 这个值就是基准数的下标位置
nums[begin]=temp;
return begin;
}
快速排序----
最新推荐文章于 2024-07-25 06:53:26 发布