• 【排序】快速排序


     复杂度:O(n log n)

     基本思想:通过一趟排序讲待排序记录分隔成独立的两部分,其中一部分记录的关键字均比另一部分记录的关键字小,则可分别对这两部分记录继续进行排序,以达到整个序列有序。

     #include <stdio.h> 


    int Partition(int *a, int low, int high)
    {
        
        int pivotkey = a[low];
        //注意左右分别对应传入的low high
        while(low<high)
        {
            while(low<high && a[high]>=pivotkey)//中枢要比右边的小
                --high;
            a[low]=a[high];//发现一个比中枢小的,移到左边

            while(low<high && a[low]<=pivotkey)//中枢要比左边的大
                ++low;
            a[high]=a[low];//发现一个比中枢大的,移到右边
        }
        a[low]=pivotkey;//现在high = low,将中枢移到中间

        return low;
    }

    void QSort(int *a, int low, int high)
    {
        if(low<high)
        {
            int pivotloc = Partition(a, low, high);
            QSort(a, low, pivotloc-1);
            QSort(a, pivotloc+1, high);

        }
    }
    //输出内容
    void print_content(int *a, int size)
    {
        for(int i=0;i<size;i++)
        {
            printf("%d\t",a[i]);
        }
        printf("\n");
    }
    int main(void)
    {
        int a[]={0,7,8,9,3,4,5,1,2,6,11,10,13,12};
        QSort(a,0,sizeof(a)/sizeof(a[0]));//40/4
        print_content(a,sizeof(a)/sizeof(a[0]));
        return 0;
    }

  • 相关阅读:
    【luogu2756】 飞行员配对方案问题 [二分图匹配 匈牙利算法]
    [APIO2008]紧急集合
    2019.8.27 Za
    【luogu2763】试题库问题 [网络流 最大流]
    [CQOI2014]危桥 [网络流 最大流]
    【luogu1231】教辅的组成 [网络流 最大流]
    【网络流】
    【2019.8.24】
    【匈牙利算法】
    2019.8.23 Za [数论]
  • 原文地址:https://www.cnblogs.com/no7dw/p/2228815.html
Copyright © 2020-2023  润新知