快速排序

来源:互联网 发布:文章校对软件 编辑:程序博客网 时间:2024/05/16 04:55

1.先从数列中取出一个数作为基准数。
2.分区过程,将比这个数大的数全放到它的右边,小于或等于它的数全放到它的左边。
3.再对左右区间重复第二步,直到各区间只有一个数。
实现思路
①以第一个关键字 K 1 为控制字,将 [K 1 ,K 2 ,…,K n ] 分成两个子区,使左区所有关键字小于等于 K 1 ,右区所有关键字大于等于 K 1 ,最后控制字居两个子区中间的适当位置。在子区内数据尚处于无序状态。
②把左区作为一个整体,用①的步骤进行处理,右区进行相同的处理。(即递归)
③重复第①、②步,直到左区处理完毕。

    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)                       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);          }      }  
0 0
原创粉丝点击