用来判断一个排序后的结果是不是稳定排序?
第一种方法:使用个笨方法,使用四个循环
isstable(in,out)
{
for(int i=0;i<n-1;i++){
for(int j=i+1;j<n;j++){
for(int k=0;k<n-1;k++){
for(int l=k+1;l<n;l++){
if(in[i]==in[j]&&in[i]==out[b]&&in[j]==out[a]){
return false;
}
}
}
}
}
return true;
}
第二种方法:因为冒泡排序永远都是稳定排序,所以将其他排序直接与冒泡排序的结果相对比即可。
#include<bits/stdc++.h>
using namespace std;
const int maxn=105;
struct card
{
char suit;
int value;
};
card cards[maxn];
card ccards[maxn];
int n;
void bubble()
{
for(int i=0;i<n;i++){
for(int j=n-1;j>=i+1;j--){
if(cards[j].value<cards[j-1].value){
swap(cards[j],cards[j-1]);
}
}
}
}
void selection()
{
int minn;
for(int i=0;i<n;i++){
minn=i;
for(int j=i;j<n;j++){
if(ccards[j].value<ccards[minn].value){
minn=j;
}
}
swap(ccards[i],ccards[minn]);
}
}
int isstable()
{
for(int i=0;i<n;i++){
if(cards[i].suit!=ccards[i].suit){
return 0;
}
}
return 1;
}
int main()
{
scanf("%d",&n);
for(int i=0;i<n;i++){
scanf(" %c%d",&cards[i].suit,&cards[i].value);
}
for(int i=0;i<n;i++){
ccards[i]=cards[i];
}
bubble();
selection();
for(int i=0;i<n;i++){
if(i!=0){
printf(" ");
}
printf("%c%d",cards[i].suit,cards[i].value);
}
cout<<endl;
printf("Stable\n");
for(int i=0;i<n;i++){
if(i!=0){
printf(" ");
}
printf("%c%d",ccards[i].suit,ccards[i].value);
}
printf("\n");
if(isstable()){
cout<<"Stable"<<endl;
}else{
cout<<"Not stable"<<endl;
}
return 0;
}
/*
5
H4 C9 S4 D2 C3
*/