算法导论:c++快速排序

客官°小女子只卖身不卖艺 2022-06-04 02:26 308阅读 0赞

快速排序也采用分治的思想,以最后一个元素为基准把其分成大于它和小于它的两部分,关键在于确定分割点。

算法思想

这里写图片描述

一趟快排

这里写图片描述

这里写图片描述

算法实现

安装书上的算法思想,主要要注意

i,j的初始化,i=p-1,j=p
终止条件j=r
每次循环j都要+1移动

  1. /*快排分割,p首端,r尾端,i控制小于,j控制大于*/
  2. int quick_partition(int array[], int p, int r)
  3. {
  4. int x = array[r];
  5. int i = p - 1; //注意i和p的初始值
  6. for (int j=p; j<r;j++)
  7. {
  8. if (array[j] < x) //小于则发生交换
  9. {
  10. i++;
  11. int temp = array[i];
  12. array[i] = array[j];
  13. array[j] = temp;
  14. }
  15. }
  16. //交换分割点和最尾元素
  17. int temp = array[i+1];
  18. array[i + 1] = array[r];
  19. array[r] = temp;
  20. return i + 1; //返回分割点
  21. }
  22. /*快速排序*/
  23. void quicksort(int array[], int p, int r)
  24. {
  25. if (p < r) {
  26. int q = quick_partition(array, p, r);
  27. quicksort(array, p, q-1);
  28. quicksort(array, q+1, r);
  29. }
  30. }

主函数测试

  1. int main()
  2. {
  3. const int len = 8;
  4. int array[len] = { 2,8,7,1,3,5,6,4};
  5. quicksort(array, 0, 7);
  6. for (int i = 0; i < len; i++)
  7. {
  8. cout << array[i] << " ";
  9. }
  10. }

输出: 1 2 3 4 5 6 7 8

发表评论

表情:
评论列表 (有 0 条评论,308人围观)

还没有评论,来说两句吧...

相关阅读

    相关 快速排序算法导论

    本算法翻译自算法导论第三版(中文版)第7章170(有兴趣的可以看看,我感觉这本书还是跟晦涩的,可能我也没多读几次的原因); 1、快速排序介绍 快速排序是一种在实际排序应用

    相关 算法导论c++归并排序

    基本思想就是把数组一直分成两半,然后对这两半进行排序归并。 先分成左右两半,然后合并时比较左右两半一直选最小的替代原数组。这种排序是非原址的,需要额外的空间。 伪代码非