排序的基本概念和分类
排序:将杂乱无章的数据按关键字递增(或递减)有序排列
假设Ki=Kj,排序前Ri领先于Rj
稳定排序:排序后的序列Ri仍领先于Rj
不稳定排序:排序后的序列Rj领先于Ri
时间开销:关键字比较次数和记录移动次数
内部排序:待排序记录存储在随机存储器中
外部排序:待排序记录数量很大,需对外存进行访问
待排序的顺序表的数据结构:
#define MAXSIZE 20
typedef int KeyType;
typedef struct{
KeyType key;//关键字
InfoType otherType;
}RecType;//记录类型
typedef struct{
RecType r[MAXSIZE+1];//r[0]为哨兵项
int length;
}SqList;
一、插入排序
将待排序的记录按其关键字大小插入已排好的子表中的适当位置
直接插入排序
1.令第一个元素 作为初始有序表
2.依次插入一个元素构造新的有序表
//直接插入法
void InsertSort(SqList &L){
for(int i=2;i<L.length;i++){
if(L.r[i].key<L.r[i-1].key){
L.r[0]=L.r[i];
L.r[i]=L.r[i-1];
for(int j=i-2;L.r[j].key>L.r[0].key;i--){
L.r[j+1]=L.r[j];
}
L.r[