蒟蒻求助40分超时

P1177 【模板】排序

试试sort兄dei
by 花园Serena @ 2018-07-16 14:07:51


a[left]不需要再赋值啦,直接给最后的a[i] 赋值成temp就可以了
by hkr04 @ 2018-07-16 14:16:16


它的基本框架就是:定左端一个数为基数x,提取出来(相当于空出一个位置放置右端比x大的数)。然后把小于x的数扔左边,大于x的数扔右边。 两个数i , j代表数组两端始末位置,开始扫描。因为第一步处理了左边,第二步就应该处理右边。 从右边扫描,大的不管,将比x小的数扔到数组左端,左端前进一位;再从左开始扫描,将比x大的扔到数组右端,右端后退一位。如此反复,当i = = j时,说明数组只剩下一个位置,这个位置上原本的数要么大于x要么等于要么小于。大于或小于的值会在i = = j之前被扔到右端或左端,等于的情况赋值也没影响。所以将x赋给这个位置。这样之后,数组[0( l ) ~i - 1] 全部小于x, [ i + 1~ r ] 全部大于x,完成一轮排序,分成两端再进行排序。 以此类推,最终当l = = r无法再进入下一层递归时,数组递增排序。递减排序左右相反即可。
by hkr04 @ 2018-07-16 14:20:46


@[Van♂様年华](/space/show?uid=86973) 直接sort根本掌握不了快速排序的精髓,做题不是只为了刷ac的兄dei。
by 据设错了 @ 2018-07-18 17:53:13


@[魏大杰](/space/show?uid=110578) 超时是因为他给的序列本来就是排好序的,而你的快排每次选的枢轴又正好是当前待排序的区间最左边的元素,而那个元素本来就在正确的位置上,不会变动位置,于是算法就变成了O(n2)...你可以把每次的left打出来看...
by Bobh @ 2018-07-31 14:59:08


|