14、【常见算法】数组分组排序

问题:给定一个包含红,白,蓝且长度为 n 的数组,将数组元素进行分类使相同颜色的元素相邻,并按照红、白、蓝的顺序进行排序。
我们可以使用整数 0,1 和 2 分别代表红,白,蓝。
例如:有数组 [1, 0, 1, 2], 直接排序成 [0, 1, 1, 2].
要求: 不能使用sort函数, 只扫描遍历一遍数组

 1 #include <iostream>
 2 using namespace std;
 3
 4 void sortColors(int * arr, int n)
 5 {
 6     int left = 0, right = n - 1;
 7
 8     int middle = 0;
 9
10     while(middle <= right)
11     {
12         if(arr[middle] == 0)
13         {
14             swap(arr[middle], arr[left]);
15             left++;
16             middle++;
17         }
18         else if(arr[middle] == 1)
19         {
20             middle++;
21         }
22         else
23         {
24             swap(arr[middle], arr[right]);
25             right--;
26         }
27     }
28 }
29
30 int main()
31 {
32     int arr[10] = {1, 2, 1, 0, 1, 0, 2, 1, 1, 0};
33     for(int i = 0; i < 10; i++)
34     {
35         cout << arr[i] << "\t";
36     }
37     cout << endl;
38     sortColors(arr, 10);
39     for(int i = 0; i < 10; i++)
40     {
41         cout << arr[i] << "\t";
42     }
43     cout << endl;
44     return 0;
45 }

原文地址:https://www.cnblogs.com/Long-w/p/9831485.html

时间: 2024-08-03 06:17:48

14、【常见算法】数组分组排序的相关文章

poj 3415 后缀数组分组+排序+并查集

Source Code Problem: 3415   User: wangyucheng Memory: 16492K   Time: 704MS Language: C++   Result: Accepted Source Code #include<iostream> #include<cstdio> #include<algorithm> #include<cstring> using namespace std; #define N 510000

Java常见排序算法之Shell排序

在学习算法的过程中,我们难免会接触很多和排序相关的算法.总而言之,对于任何编程人员来说,基本的排序算法是必须要掌握的. 从今天开始,我们将要进行基本的排序算法的讲解.Are you ready?Let‘s go~~~ 1.排序算法的基本概念的讲解 时间复杂度:需要排序的的关键字的比较次数和相应的移动的次数. 空间复杂度:分析需要多少辅助的内存. 稳定性:如果记录两个关键字的A和B它们的值相等,经过排序后它们相对的位置没有发生交换,那么我们称这个排序算法是稳定的. 否则我们称这个排序算法是不稳定的

面试常见算法-排序查找算法

算法是程序员必被的一个技能,在面试中常常出现,下面总结了面试中出现的常见算法,这些算法程序员应该牢记在心中,要非常熟练. 插入排序算法 原理:将数组分为无序区和有序区两个区,然后不断将无序区的第一个元素按大小顺序插入到有序区中去,最终将所有无序区元素都移动到有序区完成排序. 要点:设立哨兵,作为临时存储和判断数组边界之用. public class InsertSort { private static void insertSort(int[] a) { int j; int tmp; for

按首字母分组排序数组

1 2 3 // 按首字母分组排序数组 4 5 -(NSMutableArray *)sortObjectsAccordingToInitialWith:(NSArray *)arr { 6 7 8 9 // 初始化UILocalizedIndexedCollation 10 11 UILocalizedIndexedCollation *collation = [UILocalizedIndexedCollation currentCollation]; 12 13 14 15 //得出col

编程算法 - 数字在排序数组中出现的次数 代码(C)

数字在排序数组中出现的次数 代码(C) 本文地址: http://blog.csdn.net/caroline_wendy 题目: 统计一个数字在排序数组中出现的次数. 通过折半查找, 找到首次出现的位置, 再找到末次出现的位置, 相减即可. 时间复杂度O(logn). 代码: /* * main.cpp * * Created on: 2014.6.12 * Author: Spike */ /*eclipse cdt, gcc 4.8.1*/ #include <stdio.h> #inc

算法:常见的几种排序

资料摘自<数据结构C++语言描述> 选择排序 选择排序所遵循的过程来自于我们的经验.幼儿园老师通常用选择法将孩子们按身高排队.对以随机顺序排列的一组学生,老师反复从组中挑选出最矮的学生并将他或她移到正在形成的按高矮个排列的队列中.这一过程一直持续到所有学生都被移动到有序队列中,如下所示: //用选择排序算法对类型为T的n元数组进行排序 template<class T> void SelectionSort(T A[], int n){ //每遍循环中最小元素的下标 int sma

java常见数据算法_选择排序

选择排序的原理:遍历所有的元素,得到最小的元素,并将最小的元素与左边第一个元素进行交换,再次遍历除了第一个位置的所有元素,得到最小的元素,与左边第二个元素进行交换.当进行第二次遍历的时候,将最小的元素与左边的第二个元素进行交换,如此循环遍历,即可得到排序后的元素.Demo实现的基本基本步骤:1.准备数组2.编写常见的数组操作方法3.编写选择排序的方法4.测试选择排序具体参考如下:package com.zcp.ch03; /** @author Administrator 冒泡排序的实现*/pu

机器学习14种常见算法

最近收到一封公司内部邮件,说,有个机器人程序--**小助手,上线(不知道哪个部门写的),让大家没事的时候,测试,顺便让程序学习一下,超过 50 条聊天,有抽奖机会~我大概试了一下,有点无语,这写得是个神马玩意啊,这么烂,基本聊不上 3 句,最多也就是,"你是谁","多大了",即便我顺着程序说,也是驴唇不对马嘴~你要是让程序学习,互联网这么大,还用得着让人来吗,即便让人来,自己也得差不多才行啊,连个雏形都没有,还好意思让大家测试,美其名曰:让程序学习~ 机器学习无疑是

List对象分组排序算法

场景: List里面的对象是订单的节点,比如我们快递的物流状态,这个是需要有序的,所以需要根据订单号进行分组排序. import java.util.ArrayList; import java.util.Collections; import java.util.Comparator; import java.util.HashMap; import java.util.List; import java.util.Map; public class GroupSortTest { publi