快速排序

/*
    时间:2021年12月19日23:51:40 
    内容: 快速排序算法模板 
    心得: 在使用快排的时候,一定要注意循环结束的条件,以及递归处理左边,右边的边界~
*/ 
// 这里我们实现从小到大排序 如果要实现从大到小排序 我们只需要改第13 14行 ~ 
void Quicksort(int q[], int l, int r)  // 给定要排序的数组 ,左边界,右边界 
{
    if(l >= r) return;    // 如果这个数组只有一个数或者不存在 则不需要排序 
    int i = l - 1, j = r + 1;     // 根据y总给的模板, 这里让 i 指向 左边界的前一个位置,j指向右边界的后一个位置,这样方便后面do...while()的操作 
    int p = q[i + j >> 1];   // 我们让标准数为中间值  >> 为右移运算符 >> 1 相当于除2   比如说 0101 右移1的话 为 010 开始0101是 5, 现在010 是 2 
    while(i < j)   // 只要左指针与右指针不重合 
    {
        do i++; while(q[i] < p);  // 我们记录一下左边第一个大于标准值的数 
        do j--; while(q[j] > p);  // 我们再记录一下右边第一个小于标准值的数 
        if(i < j) swap(q[i], q[j]);  // 如果 左指针不与右指针重合, 证明还没有完全遍历数组中所有的数, 此时我们交换左右两边各不满足要求的数,这样的话,就可以使小于标准值的数在左边,大于标准值的数在右边 
    } 
    Quicksort(q, l, j), Quicksort(q, j + 1, r);  //  此时我们已经得到了标准值所在的位置(标准值左边的数都小于标准值,右边的数都大于他),我们在递归排序左边,递归排序右边~ 
} 

 

上一篇:while语句


下一篇:SQL Server数据库大型应用解决方案总结