快速排序の正确姿势

来源:互联网 发布:rf 910编程器驱动程序 编辑:程序博客网 时间:2024/06/05 03:21

废话不多说,直接上代码。对照代码自行理解其实比别人灌输更好。

void quick_sort(int s[], int l, int r)  {      if (l < r)      {          //Swap(s[l], s[(l + r) / 2]); //将中间的这个数和第一个数交换 参见注1          int i = l, j = r, x = s[l];          while (i < j)          {              while(i < j && s[j] >= x) // 从右向左找第一个小于x的数                  j--;                if(i < j)            //从右面找到了小于x的数,将其放在左边的坑中。左边坑中的数已提前取出放在x,防覆盖                s[i++] = s[j];              while(i < j && s[i] < x) // 从左向右找第一个大于等于x的数                  i++;                if(i < j)                   s[j--] = s[i];          }          s[i] = x;          quick_sort(s, l, i - 1); // 递归调用           quick_sort(s, i + 1, r);      }  }  

注释1:如果进行了交换,那么基准数是中间的数。其实就是先去找中间的数据的正确位置.

0 0
原创粉丝点击