美文网首页
快速排序-Quick Sort

快速排序-Quick Sort

作者: lxtyp | 来源:发表于2023-03-05 23:30 被阅读0次

    快速排序算法本质是通过多次比较和交换来实现排序。

    实现步骤
    1,设定分界值,使用分界值和待排序元素比较大小,将所有元素分为左右两部分。
    2,进行比较并交换,大于或者等于分界值的元素值集中到分界值的右边,小于分界值的元素集中到分界值的左边。此时,左边部分中各元素都小于分界值,而右边部分中各元素都大于或等于分界值。
    3,对左边和右边的元素进行独立排序。对于左侧的元素集,又可以取一个分界值,将该部分元素集分成左右两部分,同样在左边放置较小值,右边放置较大值。右侧的元素也使用相同方法进行处理。
    4,重复上述过程,通过递归将左侧部分排好序后,再递归排好右侧部分的顺序。当左、右两个部分各元素排序完成后,整个元素集的排序也就完成了。

    实现代码:

    public void solution() {
        int[] befArrays = {3, 5, 1, 4, 12, 18, 19, 20, 9, 3, 15, 7, 0};
        int length = befArrays.length;
    
        this.quickSort(befArrays, 0, length-1);
    
        for (int i=0; i<length; i++) {
            System.out.printf(befArrays[i] + "\t");
        }
    }
    
    public void quickSort(int[] befArrays, int left, int right) {
        if (left >= right) {
            return;
        }
    
        int flag = befArrays[left];
        int index = left;
        int l = left;
        int r = right;
        while (l<r) {
            while (l<r && flag<befArrays[r]) {
                r--;
            }
            if (l<r && flag>=befArrays[r]) {
                befArrays[index] = befArrays[r];
                befArrays[r] = flag;
                l++;
                index = r;
            }
    
            while (l<r && flag>befArrays[l]) {
                l++;
            }
            if (l<r && flag<befArrays[l]) {
                befArrays[r] = befArrays[l];
                befArrays[l] = flag;
                r--;
                index = l;
            }
        }
        this.quickSort(befArrays, left, index-1);
        this.quickSort(befArrays, index+1, right);
    }
    

    算法分析:

    时间复杂度
    最优 O(nlogn)
    最坏 O(n²)
    平均 O(nlogn)
    空间复杂度 O(logn)

    相关文章

      网友评论

          本文标题:快速排序-Quick Sort

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