快速排序

快速排序和冒泡排序一样也是交换排序的一种,快速排序是改进了冒泡排序,属于高级排序,时间复杂度也大大降低。
快速排序原理 首先在一组无规则数组中 例:{3,6,7,9,5,1,4,8}
image.png
我们以arr[left]为mid中间点值(当然这里可以随意指定) left为比3小的数,right为3大的数,3为分割线(从小到大排序),

判断arr[right]>=mid的话,往前移动,一直移动到1的位置,因为arr[right] =1 >=mid 不成立,然后停止移动
然后在移动左指向,判断 arr[left]<=mid ,到了arr[left] = 6 的位置,停下来,交换彼此的位置


image.png

(此处停下,然后交换位置)
然后再次移动,一直移动到 left == right时


image.png

此时然中值和指向的值交换位置 即
image.png

然后递归上述操作,左递归,右递归即可排序完成 ,

下面代码演示:

public class QuickSort {

    public static void main(String[] args) {
         int[] arr = {6,3,7,9,5,1,4,8};
         sort(arr.length-1,0,arr);
         System.out.println(Arrays.toString(arr));
    }
    
    public static void sort(int right,int left,int[] arr) {
        if(left>right) {
            return;
        }
        int l = left; //left为0
        int r = right;//right为数组长度-1 最后一个下标
        int mid = arr[left];//中值 随意定的 
        while(l!=r) {
            //先让右指向移动
            while(arr[r]>=mid&&l<r) {
                r--;
            }
            //再让左指向移动
            while(arr[l]<=mid&&l<r) {
                l++;
            }
            //都停止移动时,交换双方位置
            int temp = arr[r];
            arr[r] = arr[l];
            arr[l] = temp;
        }
        //当都指向同一下标时,交换与中值的位置
        arr[left] = arr[l];
        arr[l] = mid;
        
        //重复上面操作
        //左递归
        sort(l-1, left, arr);
        //右递归
        sort(right, l+1, arr);
    }
}
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容