各种排序算法及时间&空间复杂度详解(一)简单排序算法

本文介绍了排序算法的稳定性概念,并详细讲解了冒泡排序、简单选择排序和直接插入排序这三种简单排序算法,包括它们的实现代码、时间复杂度分析。冒泡排序在最好情况下时间复杂度为O(n),最坏情况下为O(n^2)。简单选择排序的时间复杂度始终为O(n^2),但移动数据次数较少。
摘要由CSDN通过智能技术生成

排序

排序算法的稳定性

假设ki = kj(i <= i <= n,1 <=j<=n, i !=j),且在排序前的序列中ri领先于rj(即i<j)。如果排序后仍然领先,则称所用的排序方法是稳定的;反之,若可能使得排序后的序列中rj领先ri,则称所用的排序方法是不稳定的。

各种排序算法介绍

本文一共介绍7种排序算法,按照算法的复杂度分为两大类,冒泡排序、简单选择排序和直接插入排序属于简单算法,而希尔排序、堆排序、归并排序、快速排序属于改进算法。

为了讲清楚排序算法的代码,先提供一个用于排序用的顺序表结构。 

1
2
3
4
5
6
#define MAXSIZE 10//用于要排序数组个数最大值,可根据需要修改
typedef struct
{
    int r[MAXSIZE + 1];//用于存储要排序数组,r[0]用作哨兵或临时变量
    int length;//用于记录顺序表的长度
}SqList;

另外,由于排序常用到的操作是两个数组元素的交换,我们将它写成函数。

1
2
3
4
5
6
7
//交换L中数组r的下标为i和j的值
void swap(SqList *L, int i, int j)
{
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值