楼主: afc
跳转到指定楼层
上一主题 下一主题
收起左侧

[二分/排序/搜索] 最简洁的快速排序

🔗
austurela 2013-11-19 03:46:59 | 只看该作者
全局:
北美农民 发表于 2013-11-19 03:35
int a = Integer.MAX_VALUE - 10;
    int b = Integer.MAX_VALUE - 1;
    int c;

你说的对。。。我刚一直把“溢出”理解成了indexOufOfBound

点评

数字溢出那index就溢出了  发表于 2013-11-19 05:07
回复

使用道具 举报

🔗
arthur1026 2013-11-20 23:05:32 | 只看该作者
全局:
北美农民 发表于 2013-11-10 05:17
LZ这里可以用, 但建议不要用。 因为很多时候不知道swap会不会是针对同一个引用进行, 这样就变0 了。比如 ...

原来还可以这样swap,学习了!
回复

使用道具 举报

🔗
yabirthday 2020-5-3 15:58:51 | 只看该作者
全局:
  1. int partion(vector<int>& nums, int left, int right) {
  2.     int pivot = nums[left], low = left;
  3.     while (left < right) { //
  4.         while (left < right && nums[right] >= pivot) right--;
  5.         while (left < right && nums[left] <= pivot) left++;
  6.         swap(nums[left], nums[right]);
  7.     }
  8.     swap(nums[left], nums[low]);
  9.     return left;
  10. }

  11. void quickSort(vector<int>& nums, int left, int right) {
  12.     if (left >= right) return;
  13.     int pos = partion(nums, left, right);
  14.     quickSort(nums, left, pos - 1);
  15.     quickSort(nums, pos + 1, right);
  16. }
复制代码
回复

使用道具 举报

全局:
北美农民 发表于 2013-11-10 04:12
快排什么版本都见过, 我就写这种。 不见得比我简洁吧.
确实 我也只有这种能写对了
回复

使用道具 举报

🔗
1045278974 2020-5-3 23:13:12 | 只看该作者
全局:
EroicaCMCS 发表于 2013-11-9 19:45
效率和可读性之间要取舍啊,最近也很犹豫这个问题。。
据说业界先写成可读性高的代码,然后改写,把长的 ...

变量名对C语言运行效率没有任何影响。何来取舍之说?目前只有js习惯干这种事情,但js这么做是为了减少源文件的大小,让网页加载更快。C这种编译语言需要刻意把变量名取成1个字母只能损害可读性
回复

使用道具 举报

🔗
ovarer 2020-5-4 06:28:16 | 只看该作者
全局:
  1. void quick_sort(int a[], int first, int last) {
  2.     if (first < last) {
  3.         int pivot = a[last], p_idx = first - 1;

  4.         for (int i = first; i <= last; ++i)
  5.             if (a[i] <= pivot || i == last) {
  6.                 int temp = a[++p_idx];
  7.                 a[p_idx] = a[i];
  8.                 a[i] = temp;
  9.             }

  10.         quick_sort(a, first, p_idx - 1);
  11.         quick_sort(a, p_idx + 1, last);
  12.     }
  13. }
复制代码


这样行吗?
回复

使用道具 举报

全局:
yabirthday 发表于 2020-5-3 15:58
[mw_shl_code=cpp,true]int partion(vector& nums, int left, int right) {
    int pivot = nums[left],  ...

挑个小刺,partition拼错了~
回复

使用道具 举报

无效楼层,该帖已经被删除
您需要登录后才可以回帖 登录 | 注册账号
隐私提醒:
  • ☑ 禁止发布广告,拉群,贴个人联系方式:找人请去🔗同学同事飞友,拉群请去🔗拉群结伴,广告请去🔗跳蚤市场,和 🔗租房广告|找室友
  • ☑ 论坛内容在发帖 30 分钟内可以编辑,过后则不能删帖。为防止被骚扰甚至人肉,不要公开留微信等联系方式,如有需求请以论坛私信方式发送。
  • ☑ 干货版块可免费使用 🔗超级匿名:面经(美国面经、中国面经、数科面经、PM面经),抖包袱(美国、中国)和录取汇报、定位选校版
  • ☑ 查阅全站 🔗各种匿名方法

本版积分规则

>
快速回复 返回顶部 返回列表