码迷,mamicode.com
首页 > 编程语言 > 详细

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

时间:2018-06-18 00:30:23      阅读:190      评论:0      收藏:0      [点我收藏+]

标签:str   lan   cas   test   返回   测试   color   bug   elf   

  • 题目

有一个只由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节 三色排序练习题

标签:str   lan   cas   test   返回   测试   color   bug   elf   

原文地址:https://www.cnblogs.com/ranjiewen/p/9194134.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!