• 排序之快速排序算法


     1 /*
    2 一趟快速排序的算法是:   
    3 找一个记录,以它的关键字作为“枢轴”,
    4 凡其关键字小于枢轴的记录均移动至该记录之前,
    5 反之,凡关键字大于枢轴的记录均移动至该记录之后。
    6 A[0] A[1] A[2] A[3] A[4] A[5] A[6]:   
    7 49 38 65 97 76 13 27   
    8 进行第一次交换后:
    9 27 38 65 97 76 13 49   
    10 进行第二次交换后:
    11 27 38 49 97 76 13 65   
    12 进行第三次交换后:27 38 13 97 76 49 65    
    13 进行第四次交换后:27 38 13 49 76 97 65
    14 */
    15 int fqsort(int low,int high,int a[])
    16 {
    17 int i = low,j = high,k = a[low];//找一个比较的点
    18 while(i<j)
    19 {
    20 while(i<j&&a[j]<=k)//从右向左移直至找到比k大的数
    21 j--;
    22 a[i] = a[j];//比这个数小的放右边
    23 while(i<j&&a[i]>=k)//从左向右移直至找到比k小的数
    24 i++;
    25 a[j] = a[i];//比这个数小的放左边
    26 }
    27 a[i] = k;
    28 return j;//j左右两边已经被k分割开 再把j+1当作右边一组的low j-1当作左边一组的high进行下一次的快排
    29 }
    30 void qsort(int low,int high,int a[])
    31 {
    32 int q;
    33 if(low<high)
    34 {
    35 q = fqsort(low,high,a);//找到分割点
    36 qsort(low,q-1,a);//左右两边进行快排
    37 qsort(q+1,high,a);
    38 }
    39 }
  • 相关阅读:
    Luogu P5030 长脖子鹿放置(网络流)
    BZOJ3037 创世纪(基环树DP)
    LuoguP1240 诸侯安置
    LuoguP3128 [USACO15DEC]最大流Max Flow (树上差分)
    总结-一本通提高篇&算竞进阶记录
    LuoguP5022 旅行 (割点,基环树)
    $tsinsenA1067$
    $SCOJ4427 Miss Zhao's Graph$
    $Edmonds-Karp$[网络流]
    $AC自动机$
  • 原文地址:https://www.cnblogs.com/shangyu/p/2349880.html
Copyright © 2020-2023  润新知