美文网首页
JS经典算法之二快速排序!必读

JS经典算法之二快速排序!必读

作者: 拾柒_aab0 | 来源:发表于2019-10-27 23:00 被阅读0次

    快速排序

    我们从数组中选择一个元素,我们把这个元素称之为中轴元素吧,然后把数组中所有小于中轴元素的元素放在其左边,所有大于或等于中轴元素的元素放在其右边,显然,此时中轴元素所处的位置的是有序的。也就是说,我们无需再移动中轴元素的位置。

    从中轴元素那里开始把大的数组切割成两个小的数组(两个数组都不包含中轴元素),接着我们通过递归的方式,让中轴元素左边的数组和右边的数组也重复同样的操作,直到数组的大小为1,此时每个元素都处于有序的位置

    为方便理解我还准备了动图:

    image

    如果还是不懂的话我还给你准备了优质的文章讲解:不要在问我快速排序

    代码如下:

    public class QuickSort {
        public static int[] quickSort(int[] arr, int left, int right) {
            if (left < right) {
                //获取中轴元素所处的位置
                int mid = partition(arr, left, right);
                //进行分割
                arr = sort(arr, left, mid - 1);
                arr = sort(arr, mid + 1, right);
            }
            return arr;
        }
    
        private static int partition(int[] arr, int left, int right) {
            //选取中轴元素
            int pivot = arr[left];
            int i = left + 1;
            int j = right;
            while (true) {
                // 向右找到第一个小于等于 pivot 的元素位置
                while (i <= j && arr[i] <= pivot) i++;
                // 向左找到第一个大于等于 pivot 的元素位置
                while(i <= j && arr[j] >= pivot ) j--;
                if(i >= j)
                    break;
                //交换两个元素的位置,使得左边的元素不大于pivot,右边的不小于pivot
                int temp = arr[i];
                arr[i] = arr[j];
                arr[j] = temp;
            }
            arr[left] = arr[j];
            // 使中轴元素处于有序的位置
            arr[j] = pivot;
            return j;
        }
    }
    

    相关文章

      网友评论

          本文标题:JS经典算法之二快速排序!必读

          本文链接:https://www.haomeiwen.com/subject/ewamvctx.html