计蒜客 三值排序

Posted SeeKHit

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了计蒜客 三值排序相关的知识,希望对你有一定的参考价值。

三值排序

 

排序是一种很频繁的计算任务。一个实际的例子是,当我们给某项竞赛的优胜者按金银铜牌排序的时候。在这个任务中可能的值只有三种1,2和3。我们用交换的方法把他排成升序的。

写一个程序计算出,计算出的一个包括1、2、3三种值的数字序列,排成升序所需的最少交换次数。

输入第1行为类别的数量N(1≤N≤1000)

输入第2行到第N+1行,每行包括一个数字(1或2或3)。

输出包含一行,为排成升序所需的最少交换次数。

样例输入

9
2
2
1
3
3
3
2
3
1

样例输出

4
 1 #include"iostream"
 2 #include"algorithm"
 3 #define MAX 10000
 4 using namespace std;
 5 
 6 int a[MAX],num[4];
 7 int n, n1,n2,n3;
 8 
 9 
10 void msort(int n, int *a)
11 {
12     for (int i = 0; i< num[1];i++)
13     {
14         if (a[i] != 1)
15             n1++;
16     }
17 
18     for (int i = num[1]; i< num[1]+num[2]; i++)
19     {
20         if (a[i] == 2)
21             n2++;
22     }
23 
24     for (int i = num[1] + num[2]; i<n; i++)
25     {
26         if (a[i] == 3)
27             n3++;
28     }
29 }
30 
31 int main()
32 {
33     n1 = n2 = n3 = 0;
34     cin >> n;
35     for (int i = 0; i<n; i++)
36     {
37         cin >> a[i];
38         num[a[i]]++;
39     }
40 
41     msort(n, a);
42 
43     if (n2>n3) n1 += n2;
44     else n1 += n3;
45     cout<< n1;
46 
47     system("pause");
48 }

 

以上是关于计蒜客 三值排序的主要内容,如果未能解决你的问题,请参考以下文章

计蒜客 贝壳找房函数最值(好题,巧妙排序)

计蒜客课程竞赛入门--堆排序 流程记

计蒜客 排序后的数组删除重复数字

计蒜客 | 拓扑排序 | 虎威山上的分配

复习---归并排序求逆序对--计蒜客2017noip模拟赛二--蒜头君的排序

计蒜客 棋子等级