每次都选一个基准点,大的放在右边,小的放在左边,等于的随便归到一个地方,不断拆分拆分。 这里直接选用[0],当然这种情况下往往会发生不理想的情况, 不理想的情况表示每次恰好都是最小或最大,这样的结果会直接导致算法变为O(n^2).
(self, unsorted_list)
| 44 | class Solution(object): |
| 45 | |
| 46 | def quickSort(self, unsorted_list): |
| 47 | """ |
| 48 | 每次都选一个基准点,大的放在右边,小的放在左边,等于的随便归到一个地方,不断拆分拆分。 |
| 49 | 这里直接选用[0],当然这种情况下往往会发生不理想的情况, |
| 50 | 不理想的情况表示每次恰好都是最小或最大,这样的结果会直接导致算法变为O(n^2). |
| 51 | """ |
| 52 | |
| 53 | if len(unsorted_list) <= 1: |
| 54 | return unsorted_list |
| 55 | |
| 56 | left = [] |
| 57 | right = [] |
| 58 | |
| 59 | meta = self._getMiddle(unsorted_list) |
| 60 | for i in unsorted_list[:meta] + unsorted_list[meta+1:]: |
| 61 | if i <= unsorted_list[meta]: |
| 62 | left.append(i) |
| 63 | continue |
| 64 | right.append(i) |
| 65 | |
| 66 | return self.quickSort(left) + [unsorted_list[meta]] + self.quickSort(right) |
| 67 | |
| 68 | def _getMiddle(self, unsorted_list): |
| 69 | """ |
no test coverage detected