八大算法拿下

快速排序

public class sort {
    public static void main(String[] args){
        int arr[]={59,6,3,8,51,23};
        QuickSort(arr,0,arr.length-1);
        System.out.println(Arrays.toString(arr));
    }
    public static void QuickSort(int[] arr,int left,int right){
        //递归出口
        if(left>=right){
            return;
        }
        //定义变量保存基准数
        int base = arr[left];
        //定义变量i指向最左边(目的是每一轮中)
        int i = left;
        //定义变量j指向最右边(目的是每一轮中)
        int j = right;
        //当i和j没有相遇的时候,执行循环
        while(i=base&&i

快速排序思想:

通过一趟排序将待排记录分隔成独立的两部分,其中一部分记录的关键字均比另一部分的关键字小,则可以分别对这两部分记录继续进行排序,以达到整个序列有序

快速排序法使用分治法来吧一个串分为两个字串

1.会把数组当中的一个树当作基准数

2.一般会把数组中最左边的树当作基准数,然后从两边进行检索。从右边检索比基准数小的,然后左边检索比基准数大的。如果检索到了,就停下,然后交换这两个元素,然后继续检索


1.首先找到一个基准数base=5

八大算法拿下_第1张图片

2.先移动右边的指针j,找到第一个小于5的数,也就是1

然后在移动左边的指针i,找到第一个大于5的数,也就是6

然后进行交换

八大算法拿下_第2张图片

 3.i和j一旦相遇,就停止检索把基准数和相遇位置的数进行交换

八大算法拿下_第3张图片

4.第一次排序完毕,排序完成以后我们发现排序左边的数比基准数小,右边比基准数大

八大算法拿下_第4张图片

把左右两边的数据都看成一个新的数组,那么这个数组和原来的数会经历相同的方式进行排序

分析递归表达式和递归出口

八大算法拿下_第5张图片

八大算法拿下_第6张图片

 八大算法拿下_第7张图片

 八大算法拿下_第8张图片

 

 

你可能感兴趣的:(算法,算法)