数据结构五大排序算法----插入排序 交换排序 选择排序 归并排序 基数排序

对五种排序方法可以分成6大类

存储介质:内部排序和外部排序

比较器个数:串行排序和并行排序

主要操作:比较排序和基数排序

辅助空间:原地排序和非原地排序

稳定性:稳定排序和非稳定排序

自然性:自然和非自然排序(自然排序是指输入的数据越有序,排序的速度就越快的方法,而非自然排序是指一开始输入的数据比较有序,排序的速度反而变慢的方法)

以下排序方法都以顺序存储表存储:

#define MAXSIZE 20 //设记录不超过20个
typedef int KeyType;//关键字为整型量

typedef struct {//记录每个(数据元素)的结构
	KeyType key;//数据项
 }RedType;
typedef struct {
	RedType r[MAXSIZE + 1];//r[0]一般为哨兵位或者缓冲区
	int length;
}Sqlist;

插入排序分2种

1.直接插入排序

提示直接插入排序中数组中第一个位置为哨兵位  L.r[0]=L[i]

算法:

//直接插入排序算法
void InserSort(Sqlist& L) {
	int i, j;
	for (i = 2; i <= L.length; ++i) {
		if (L.r[i].key < L.r[i - 1].key) {//
			L.r[0] = L.[i];//复制哨兵位
			for (j = i - 1; L.r[0].key < L.r[j].key; --j) {
				L.r[j + 1] = L.r[j];//比哨兵位大的值都往后移动
			}
			L.r[j + 1] = r.[0];//将哨兵位的值插入
		}
	}
}

根据算法可以分析出:

时间效率

最好情况: O(n)

最坏情况:O(n的二次方)

平均情况:O(n的二次方)

空间效率:O(1)

只额外使用了哨兵r[0]空间

算法特点:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值