生活随笔
收集整理的這篇文章主要介紹了
三值排序
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
排序是一種很頻繁的計算任務。一個實際的例子是,當我們給某項競賽的優勝者按金銀銅牌排序的時候。在這個任務中可能的值只有三種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
#include <iostream>
#include <cstdio>
#include <algorithm>
using namespace std;
int main(){
int n,a[
1001];
cin>>n;
for(
int i=
0;i<n;++i){
cin>>a[i]; }
int sum1=
0,sum2=
0,sum3=
0,sum=
0;
for(
int i=
0;i<n;++i){
if(a[i]==
1)sum1++;
if(a[i]==
2)sum2++;
if(a[i]==
3)sum3++;}
int num1=
0,num2=
0,num=
0;
for(
int j=sum1;j<n-sum3;++j){
if(a[j]==
3)num1++;}
for(
int j=n-sum3;j<n;++j){
if(a[j]==
2)num2++;}num=max(num1,num2);
for(
int j=
0;j<sum1;++j){
if(a[j]!=
1)sum++;}
cout<<num+sum<<endl;
}
總結
以上是生活随笔為你收集整理的三值排序的全部內容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。