题意:字符串比较,逆序数排序。难度:1星。
应注意排序的稳定性。
不稳定的排序算法:选择排序、快速排序、希尔排序、堆排序;
稳定的排序算法:冒泡排序、插入排序、归并排序和基数排序。
/*
* POJ 1007 DNA Sorting
* 字符串比较;逆序数排序;
*
* 将序号与对应逆序数绑定:
* inversion[i] = inversion[i] * 100 + i;
* 排序;
*
*/
#include <iostream>
using namespace std;
int main()
{
char input[100][56];
int length, number;
int inversion[100];
int i, j, k, tmp;
cin >> length >> number;
for (i = 0; i < number; i++)
{
cin >> input[i];
for (j = 0, inversion[i] = 0; j < length - 1; j++)
{
for (k = j + 1; k < length; k++)
{
if (input[i][j] > input[i][k])
{/* 计算逆序数 */
inversion[i]++;
}
}
}//for (int j = 0; j < length - 1; j++)
inversion[i] = inversion[i] * 100 + i; /* 将序号与对应逆序数绑定 */
}//for (int i = 0; i < number; i++)
/* 将逆序数升序排序 */
for (i = 0; i < number - 1; i++)
{/* 冒泡排序 */
for (j = 0; j < number - 1 - i; j++)
{
if (inversion[j] > inversion[j + 1])
{
tmp = inversion[j + 1];
inversion[j + 1] = inversion[j];
inversion[j] = tmp;
}
}
}
for (i = 0; i < number; i++)
{
cout << input[inversion[i] % 100] << endl;
}
return 0;
}