比较 冒泡排序与选择排序的稳定性,找出稳定排序算法
看输入是否有稳定输出
例:
输入:
5
H4 C9 S4 D2 C3
输出:
D2 C3 H4 S4 C9
Stable
D2 C3 S4 H4 C9
Not stable
代码:
#include <cstdio>
#include <iostream>
#include <algorithm>
using namespace std;
struct Card
{
char suit;
int value;
}c1[100],c2[100];
void Sort1(Card A[],int n) //冒泡
{
for(int i=0;i<n;i++) {
for(int j=n-1;j>=i+1;j--) {
if( A[j].value < A[j-1].value )
swap( A[j],A[j-1]);
}
}
}
void Sort2(Card A[],int n) //选择
{
for(int i=0;i<n;i++) {
int minj=i;
for(int j=i;j<n;j++) {
if( A[j].value < A[minj].value )
minj=j;
}
swap( A[i],A[minj]);
}
}
void Output(Card A[],int n) //打印输出
{
for(int i=0;i<n;i++) {
if(i>0) cout<<" ";
cout<<A[i].suit<<A[i].value;
}
cout<<endl;
// printf("%d%c",A[i],i==n-1?'\n':' ');
}
bool Comparison(Card c1[],Card c2[],int n) //冒泡一直是稳定的,直接让选择排序的结果与冒泡比
{
for(int i=0;i<n;i++) {
if( c1[i].suit != c2[i].suit )
return false;
}
return true;
}
int main()
{
int n;
cin>>n;
for(int i=0;i<n;i++) {
cin>>c1[i].suit>>c1[i].value;
c2[i]=c1[i];
}
Sort1 ( c1 , n );
Sort2 ( c2 , n );
Output( c1 , n );
cout<<"Stable"<<endl;
Output( c2 , n );
if( Comparison( c1, c2, n ))
{
cout<<"Stable"<<endl;
}
else
cout<<"Not stable"<<endl;
return 0;
}
/*
输入:
5
H4 C9 S4 D2 C3
输出:
D2 C3 H4 S4 C9
Stable
D2 C3 S4 H4 C9
Not stable
*/