46、排序的概念

排序的一般定义:排序是计算机经常进行的一种操作,其目的是将一组无序数组调整为有序数组。

数学定义:

假设n个数据元素的序列{R1,R2,....,Rn},其相应的关键字序列为{k1,k2,...,kn}

这些关键字可以进行比较,即:存在关系

kp1<=kp2<=...

按此固有关系将上式记录为:

{RP1, Rp2,Rp3,...Rpn}的操作成为排序。

排序的稳定性:

如果在序列中有两个元素ri和rj,他们的关键字ki==kj,且在排序之前,对象ri排在rj前面;如果在排序之后,对象ri仍在对象rj的前面,则称这个排序是稳定的,否则称为不稳定的。

多关键字排序:排序时需要比较的关键字多于一个:

排序结果首先按关键字1进行排序;

当关键字1相同时按关键字2进行排序;...

当关键字n-1相同时按关键字n进行排序。

#include <iostream>
#include "Wobject.h"
using namespace std;
using namespace WSlib;
struct Test:public Wobject
{
int key1;
int key2;
Test(int k1,int k2)
{
key1=k1;
key2=k2;
}
bool operator ==(const Test& t)
{
return((key1==t.key1)&&(key2==t.key2));
}
bool operator !=(const Test& t)
{
return(! (*this==t));
}
bool operator <(const Test& t)
{
return ((key1<t.key1)||(key1==t.key1)&&(key2<t.key2));
}
bool operator >=(const Test& t)
{
return (!(*this<t));
}
bool operator >(const Test& t)
{
return ((key1>t.key1)||(key1==t.key1)&&(key2>t.key2));
}
bool operator <=(const Test& t)
{
return (!(*this>t));
}
};
int main()
{
Test t1(3,4);
Test t2(3,5);
cout<<(t1>t2)<<endl;
return 0;
}

关键操作:比较,交换

排序的审判:时间性能比较和交换的数量

辅助存储空间:为完成排序操作需要的额外的存储空间,必要时可以“空间换时间”

算法的实现复杂性:过于复杂的排序法可能影响可读性和可维护性。

小结:排序是无序到有序的过程,排序具有稳定性,是选择排序算法的因素之一,比较和交换是排序的基本操作,多关键字排序与但关键字排序无本质区别,排序的时间性能是区分算法好坏的主要因素。

猜你喜欢

转载自blog.csdn.net/WS857707645/article/details/80557735
46