zoukankan      html  css  js  c++  java
  • 快速排序

    作为笔记写的,借鉴性不大。

    快速排序是基于分治法基础上的,也就是说大概包含了三部分;

    1.划分分区

        我之前一直以为二分就是所谓的从中间分开,后来才知道,二分只是将属于不同的情况的以某一值或一点分开而已。而且分区的方法多种多样,我们在这里取一种较为简单的来阐述什么是快速排序。

    2.递归求解

        分开的区间,排序(排序时,我们需要取任意值最为中轴值来将数分到两边);

    3.合并

        这里其实用不到合并这一项。你想,我们每一次递归的时候就将其变成有序的,在最后一层递归结束时,每一个都有序,那总体不就也有序了。

    在这种快速排序的方法中它的T(n) =O(nlg n) 是最理想的一种情况,也就是它的运行次数平均为nlgn次,但如果我们取到的最大值或最小值,那这个时候,T(n) = O(n2) ,也就说我们至少要运行n那我们有什么可以解决的方法吗? 问题总是有它的解决方法的,我们取中轴值一般去数组的第一位或最后一位,那我们不不取这两个点,而是在数组中人任取一值不就大大降低我们取到最值的风险了吗?

    void quicksort(vector<int> &v, int left, int right)
    {
        if (left < right)
        {
            int key = v[left];
            int low = left;
            int high = right;
            while (low < high)
            {
                while (low<high && v[high] >= key)
                    high--;
                v[low] = v[high];
                while (low < high && v[low] <= key)
                    low++;
                v[high] = v[low];
            }
            v[low] = key;
            quicksort(v, left, low - 1);
            quicksort(v, low + 1, right);
        }
    }
  • 相关阅读:
    MSP430:输入捕获
    MSP430:串口输出
    测试输出时钟频率
    C# MySql Select
    C# MySql 连接
    MSP430:PWM产生
    MSP430:定时器学习TimerA
    MSP430:中断简介
    MSP430 PIN 操作寄存器
    剑指offer---包含min函数的栈
  • 原文地址:https://www.cnblogs.com/7750-13/p/7268821.html
Copyright © 2011-2022 走看看