关于排序算法的稳定性

我要写一段代码来验证稳定性。数十随机产生的。但是怎么写代码呀。请救救我吧

假定在待排序的记录序列中,存在多个具有相同的关键字的记录,若经过排序,这些记录的相对次序保持不变,即在原序列中,r[i]=r[j],且r[i]在r[j]之前,而在排序后的序列中,r[i]仍在r[j]之前,则称这种排序算法是稳定的;否则称为不稳定的。

即可说明它的不稳定性;而对于稳定的排序算法,必须对算法进行分析从而得到稳定的特性。需要注意的是,排序算法是否为稳定的是由具体算法决定的,不稳定的算法在某种条件下可以变为稳定的算法,而稳定的算法在某种条件下也可以变为不稳定的算法。



扩展资料:

基数排序按照低位先排序,然后收集;再按照高位排序,然后再收集;依次类推,直到最高位。有时候有些属性是有优先级顺序的。

先按低优先级排序,再按高优 先级排序,最后的次序就是高优先级高的在前,高优先级相同的低优先级高的在前。基数排序基于分别排序,分别收集,所以其是稳定的排序算法。

温馨提示:答案为网友推荐,仅供参考
第1个回答  2011-04-05
struct Element{
int pos;
int val;
};
Element a[8000]
for (int i = 0; i < 7000; i++){
a.pos = i , a.val = rand() % 100;
}
// 对a 进行排序
qsort()
//
for (int i = 1; i < 7000; i++)
{
if (a[i-1].val == a[i].val && a[i-1].pos > a[i].pos)
{
cout << "不稳定 "<<endl;
break;
}
}
第2个回答  2011-03-22
struct{int key,val;}a[n];
对以上数组依据key排序,观察所有key相同的val的顺序是否发生变化追问

这我知道啊,我需要的是代码。我随机数是产生7000呢。

追答

随机生成a
将a复制到b
使用要测试的排序算法按照key对b排序
逐一比较a与b对应元素val的值,如果有不同,则说明不稳定。

由于你随机生成数组,故未必能说明一定稳定。

本回答被提问者采纳
相似回答