快速排序

  1. // 格式化后:
  2. //backward --> forwart <---
  3. inline void moveNumber(vector<int>& nums,int& i,int& j,int baseNum,bool backward)
  4. {
  5. while(i < j && backward ? (nums[i] < baseNum) :(nums[j] > baseNum))
  6. backward ? ++i:--j;
  7. if(i < j)
  8. nums[backward?j:i] = nums[backward?i:j];
  9. }
  10. void sort(vector<int>& nums,int begin,int end)
  11. {
  12. if(begin >= end)
  13. return;
  14. const int baseNum = nums[begin];
  15. int i = begin;
  16. int j = end;
  17. while(i < j)
  18. for(auto state:{false,true})
  19. moveNumber(nums,i,j,baseNum,state);
  20. nums[i] = baseNum;
  21. sort(nums,begin,i - 1);
  22. sort(nums,i+1 ,end);
  23. }
  24. // 默认解法:
  25. void sort(vector<int>& nums,int begin,int end)
  26. {
  27. if(begin >= end)
  28. return;
  29. int baseNum = nums[begin];
  30. int i = begin;
  31. int j = end;
  32. while(i < j)
  33. {
  34. while(i < j && nums[j] > baseNum)
  35. --j;
  36. if(i < j)
  37. nums[i] = nums[j];
  38. while(i < j && nums[i] < baseNum)
  39. ++i;
  40. if(i < j)
  41. nums[j] = nums[i];
  42. }
  43. nums[i] = baseNum;
  44. sort(nums,begin,i - 1);
  45. sort(nums,i+1 ,end);
  46. }
文档更新时间: 2022-07-28 09:47   作者:admin