• 快速排序


    挖坑填数:

    1.i =L; j = R; 将基准数挖出形成第一个坑a[i]。

    2.j--由后向前找比它小的数,找到后挖出此数填前一个坑a[i]中。

    3.i++由前向后找比它大的数,找到后也挖出此数填到前一个坑a[j]中。

    4.再重复执行2,3二步,直到i==j,将基准数填入a[i]中。

     1 int AdjustArray(int s[], int l, int r) //返回调整后基准数的位置
     2 {
     3     int i = l, j = r;
     4     int x = s[l]; //s[l]即s[i]就是第一个坑
     5     while (i < j)
     6     {
     7         // 从右向左找小于x的数来填s[i]
     8         while(i < j && s[j] >= x) 
     9             j--;  
    10         if(i < j) 
    11         {
    12             s[i] = s[j]; //将s[j]填到s[i]中,s[j]就形成了一个新的坑
    13             i++;
    14         }
    15  
    16         // 从左向右找大于或等于x的数来填s[j]
    17         while(i < j && s[i] < x)
    18             i++;  
    19         if(i < j) 
    20         {
    21             s[j] = s[i]; //将s[i]填到s[j]中,s[i]就形成了一个新的坑
    22             j--;
    23         }
    24     }
    25     //退出时,i等于j。将x填到这个坑中。
    26     s[i] = x;
    27  
    28     return i;
    29 }
    1 void quick_sort1(int s[], int l, int r)
    2 {
    3     if (l < r)
    4     {
    5         int i = AdjustArray(s, l, r);//先成挖坑填数法调整s[]
    6         quick_sort1(s, l, i - 1); // 递归调用 
    7         quick_sort1(s, i + 1, r);
    8     }
    9 }
  • 相关阅读:
    bzoj 1208: [HNOI2004]宠物收养所
    bzoj 1207: [HNOI2004]打鼹鼠
    【NOIP模拟赛】小奇的矩阵
    【NOIP模拟赛】小奇挖矿 2
    Making the Grade POJ
    POJ 3616Milking Time
    [USACO08JAN]电话线Telephone Lines
    Radar Installation POJ
    Warfare And Logistics UVA
    【NOIP2009】最优贸易
  • 原文地址:https://www.cnblogs.com/zhmlzhml/p/13384597.html
Copyright © 2020-2023  润新知