数据结构期末复习五:内部排序

这篇博客详细介绍了内部排序的五种主要方法:直接插入排序、希尔排序、快速排序、选择排序(包括简单选择排序和堆排序)以及归并排序。内容涉及每种排序算法的基本概念、工作原理、时间复杂度、空间复杂度以及稳定性分析。对于快速排序和堆排序,还特别指出它们是不稳定的排序算法。最后,博主对比了各种排序算法在时间性能和空间性能上的特点。
摘要由CSDN通过智能技术生成

排序的基本概念和分类

排序:将杂乱无章的数据按关键字递增(或递减)有序排列

假设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[
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值