算法笔记 --- 三色排序

有一个只由0,1,2三种元素构成的整数数组,请使用交换、原地排序而不是使用计数进行排序。

给定一个只含0,1,2的整数数组A及它的大小,请返回排序后的数组。保证数组大小小于等于500。

#include <iostream>
#include <vector>
using namespace std;

class ThreeColor {
public:
    vector<int> sortThreeColor(vector<int> A, int n) {
        // write code here
        int tmp;
        int index0 = -1, index2 = n;
        for(int i = 0; i < index2; i++){
            switch (A[i]){
                case 0:
                {
                    tmp = A[i];
                    A[i] = A[++index0];
                    A[index0] = tmp;
                    break;
                }
                case 1:
                {
                    continue;
                }
                case 2:
                {
                    tmp = A[i];
                    A[i] = A[--index2];
                    A[index2] = tmp;
                    i--;
                    break;
                }
            }
        }
        return A;
    }
};
int main()
{

    vector<int> A;
    A.push_back(0), A.push_back(1), A.push_back(1), A.push_back(0), A.push_back(2), A.push_back(2), A.push_back(1), A.push_back(0), A.push_back(2), A.push_back(2);
    vector<int> res;
    ThreeColor sorter;
    res = sorter.sortThreeColor(A, 10);

    for(int i = 0; i < 10; i++){
        cout<<res[i]<<" ";
    }
    cout<<endl;

    return 0;
}
时间: 2024-10-03 16:38:25

算法笔记 --- 三色排序的相关文章

算法--三色排序练习题

三色排序练习题 第17节 三色排序练习题 有一个只由0,1,2三种元素构成的整数数组,请使用交换.原地排序而不是使用计数进行排序. 给定一个只含0,1,2的整数数组A及它的大小,请返回排序后的数组.保证数组大小小于等于500. 测试样例: [0,1,1,0,2,2],6 返回:[0,0,1,1,2,2] Java (javac 1.7) 代码自动补全 1 import java.util.*; 2 3 public class ThreeColor { 4 public int[] sortTh

第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

算法笔记_023:拓扑排序(Java)

目录 1 问题描述 2 解决方案 2.1 基于减治法实现 2.2 基于深度优先查找实现 1 问题描述 给定一个有向图,求取此图的拓扑排序序列. 那么,何为拓扑排序? 定义:将有向图中的顶点以线性方式进行排序.即对于任何连接自顶点u到顶点v的有向边uv,在最后的排序结果中,顶点u总是在顶点v的前面. 2 解决方案 2.1 基于减治法实现 实现原理:不断地做这样一件事,在余下的有向图中求取一个源(source)(PS:定义入度为0的顶点为有向图的源),它是一个没有输入边的顶点,然后把它和所有从它出发

排序练习题(四):三色排序

有一个只由0,1,2三种元素构成的整数数组,请使用交换.原地排序而不是使用计数进行排序. 给定一个只含0,1,2的整数数组A及它的大小,请返回排序后的数组.保证数组大小小于等于500. 测试样例: [0,1,1,0,2,2],6 返回:[0,0,1,1,2,2] public class ThreeColor { public int[] sortThreeColor(int[] A, int n) { // write code here int i=0; int j=0; int k=n-1

三色排序

题目大意: 给你红,白,蓝三种颜色的数组,要求按照红.白.蓝的顺序排序,leetcode链接:https://leetcode.com/problems/sort-colors/ 思路1: 直接给整个数组排序,时间复杂度O(nlogn) 思路2: 计数排序方法,使用一个类似hash的数组纪录每种颜色的个数,然后进行排序,但是需要遍历原数组两遍 思路3: 使用三个指针,p1表示红色和白色的分界线,p2表示白色和蓝色的分界线,i表示当前元素 即0~p1-1是红色的,p1~i-1表示白色的,p2+1~

算法笔记_008:选择排序和冒泡排序【蛮力法】

目录 1 问题描述 2 解决方案 2.1 选择排序原理简介 2.2 具体编码(选择排序) 2.3 冒泡排序原理简介 2.4 具体编码(冒泡排序) 1 问题描述 给定一个可排序的n元素序列(例如,数字.字符和字符串),将它们按照非降序方式重新排列. 2 解决方案 2.1 选择排序原理简介 选择排序开始的时候,我们从第一个元素开始扫描整个列表,找到它的最小元素,然后和第一个元素交换,将最小元素和第一个元素交换位置:然后,我们从第二个元素开始扫描剩下的n-1个元素,找到这n-1个元素中的最小元素,将最

算法笔记_129:计数排序(Java)

目录 1 问题描述 2 解决方案 2.1比较计数排序 2.2 分布计数排序   1 问题描述 给定一组数据,请使用计数排序,得到这组数据从小到大的排序序列. 2 解决方案 2.1比较计数排序 下面算法的时间复杂度为O(n^2),空间复杂度为O(n).此方法对于任意一组数据均可排序. 具体代码如下: package com.liuzhen.practice; public class Main { public void comparisonCountingSort(int[] A) { int[

Java数据结构和算法(三):常用排序算法与经典题型

常用的八种排序算法 1.直接插入排序 我们经常会到这样一类排序问题:把新的数据插入到已经排好的数据列中.将第一个数和第二个数排序,然后构成一个有序序列将第三个数插入进去,构成一个新的有序序列.对第四个数.第五个数--直到最后一个数,重复第二步.如题所示: 直接插入排序(Straight Insertion Sorting)的基本思想:在要排序的一组数中,假设前面(n-1) [n>=2] 个数已经是排好顺序的,现在要把第n个数插到前面的有序数中,使得这n个数也是排好顺序的.如此反复循环,直到全部排

算法学习之排序算法(三)(选择排序法)

1.引言 选择排序工作原理是每一次从待排序的数据元素中选出最小(或最大)的一个元素,存放在序列的起始位置,直到全部待排序的数据元素排完. 选择排序是不稳定的排序方法.选择排序是和冒泡排序差不多的一种排序.和冒泡排序交换相连数据不一样的是,选择排序只有在确定了最小的数据之后,才会发生交换.怎么交换呢?我们可以以下面一组数据作为测试: 2, 1, 5, 4, 9 第一次排序:1, 2, 5, 4, 9 第二次排序: 1, 2, 5, 4, 9 第三次排序: 1, 2, 4, 5, 9 第四次排序: