第2章 排序 | | 第17节 三色排序练习题

Posted ranjiewen

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了第2章 排序 | | 第17节 三色排序练习题相关的知识,希望对你有一定的参考价值。

  • 题目

有一个只由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节 三色排序练习题的主要内容,如果未能解决你的问题,请参考以下文章

第2章 排序 | 第10节 计数排序练习题

第2章 排序 || 第20节 相邻两数最大差值练习题

第2章 排序 || 第15节 有序数组合并练习题

第2章 排序 | 第14节 重复值判断练习题

SQL基础教程(第2版)第3章 聚合与排序:练习题

排序练习题:三色排序