您的位置:首页 > 其它

POJ1007 DNA Sorting

2017-01-26 22:48 302 查看
题意是按照序列的混乱程度,从最有序到无序

本想给序列中的每个字母标记逆序数目,马上否决了,只要得到整个逆序序列的混乱程度,将逆序数累加。

在输出的时候本想挑出最大,再找出次之的,但是可能出现混乱程度相同的状况,于是采用移动辅助数组的手段,以混乱程度为关键字。

发现自己冒泡排序还是不够熟练,总是想错,从头开始是沉底,每次比较,只是把最后一个元素排到位置上,内部循环,总是从0开始

for(int i = 0;i< n-1;i++ )
for(int j = 0;j < n-i-1; j++)


最后一点在声明时,一开始使用的是char型一维数组,再申请string型一维数组,因为c中char*的本质就是字符串,但是在标准输入输出流中总是出错,于是改用二维数组。

格式:

char** s = new char*
;

for(int i=0;i<n;i++)

{

//length 为一维数组的长度
s[i]=new char[length];

cin>>s[i];

}


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

const int lcm =21252;//23,28,33的最小公倍数

int main()
{
int m,n;
int* chaos = new int
;
int* flag = new int
;
cin>>m>>n;
for(int i = 0;i<n;i++)
{
chaos[i]=0;
}
//下标
for(int i = 0;i<n;i++)
{
flag[i]=i;
}
int x = n;
char** s = new char*
;
for(int i=0;i<n;i++)
{
s[i]=new char[m];
cin>>s[i];
}

//控制第几行
for (int i = 0;i< n;i++)
{
//从第一列比较起
for(int j = 0;j < m-1;j++)
{
for(int k = j+1;k < m;k++)
if(s[i][j] > s[i][k])
chaos[i]++;
}
}

//bubble_sort
for(int i = 0;i< n-1;i++ )
{
for(int j = 0;j < n-i-1; j++)
{
if(chaos[j]>chaos[j+1])
{
int temp = chaos[j+1];
chaos[j+1] = chaos[j];
chaos[j] =temp;
int tempD = flag[j+1];
flag[j+1] = flag[j];
flag[j] = tempD;
}
}
}
for(int i = 0;i<n;i++)
{
cout<<s[flag[i]]<<endl;
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  冒泡排序 acm