1. 程式人生 > >第2章 排序 | | 第17節 三色排序練習題

第2章 排序 | | 第17節 三色排序練習題

python 有一個 而不是 += while -c targe nbsp pre

  • 題目

有一個只由0,1,2三種元素構成的整數數組,請使用交換、原地排序而不是使用計數進行排序。

給定一個只含0,1,2的整數數組A及它的大小,請返回排序後的數組。保證數組大小小於等於500。

測試樣例:
[0,1,1,0,2,2],6
返回:[0,0,1,1,2,2]
  • 解析

class ThreeColor {
public:

    //思路有bug
    vector<int> sortThreeColor(vector<int> A, int n) {
        // write code here
        int
i = 0; while (A[i] == 0) i++; int k = n - 1; while (A[k] == 2) k--; int j = i; while (j < k) { if (A[j] == 0) { swap(A[i], A[j]); while (A[i] == 0) i
++; } else if (A[j] == 2) { swap(A[j], A[k]); while (A[k] == 2) k--; } else { j++; } } return A; } vector<int
> sortThreeColor2(vector<int> A, int n) { // write code here // 利用快排思想 int left = -1, right = n; int index = 0; while (index<right) { if (A[index]==0) { swap(A[++left],A[index]); index++; }else if (A[index]==2) { swap(A[index], A[--right]); } else { index++; } } return A; } };
  • python
# -*- coding:utf-8 -*-

class ThreeColor:
    def sortThreeColor(self, A, n):
        # write code here
        left=-1
        right=n
        index=0
        while index<right:
            if A[index]==0:
                left+=1
                A[left],A[index]=A[index],A[left]
                index+=1
            elif A[index]==2:
                right-=1
                A[right],A[index]=A[index],A[right]
            else:
                index+=1
        return A
  • 第2章 排序 | | 第17節 三色排序練習題 :https://www.nowcoder.com/study/vod/1

第2章 排序 | | 第17節 三色排序練習題