• 快速排序


     思路:分而治之,将序列分为2部分,左侧数据小于右侧,分别对其排序

    关键:对序列(数组)的划分,划分后的数组满足:

    • a[i]位于某个位置
    • a[0], … , a[i-1]小于a[i]
    • a[i+1], … , a[r]大于a[i]

    快速排序算法的平均效率:O(n(Lgn)),最坏时退化到O(n2)

    算法:

    //快速排序

    template <class Item>

    void QSort(Item a[], int left, int right)

    {

    if (right <= left)

    return;

    int i = Partition(a, left, right);

    QSort(a, left, i-1);

    QSort(a, i+1, right);

    }

    //选择a[right]为分割,然后扫描数组

    template <class Item>

    int Partition(Item a[], int left, int right)

    {

    int i = left-1, j = right;

    Item v = a[right];

    for(;;)

    {

    //++i这样的语句先运算再比较,对于其他语言,可以使用类似Do…Loop

    的语句

    while(a[++i] < v);

    while(v < a[--j])

    {

    if (j == left) break;

    }

    if (i >= j) break;

    exch(a[i], a[j]);

    }

    exch(a[i], a[right]);

    return i;

    }

  • 相关阅读:
    (转)iOS7界面设计规范(2)
    (转)iOS7界面设计规范(1)
    (转)iOS7人机界面设计规范
    (转)iOS Wow体验
    (转)iOS Wow体验
    (转)iOS Wow体验
    (转)iOS Wow体验
    bzoj1044木棍分割
    bzoj1690开关灯
    终于开了blog了。。
  • 原文地址:https://www.cnblogs.com/maweifeng/p/123587.html
Copyright © 2020-2023  润新知