各种排序算法分析与比较

本文探讨了四种常见的排序算法:直接插入排序、冒泡排序、快速排序和堆排序。详细分析了每种排序算法的时间复杂度和空间复杂度。其中,快速排序在最优情况下的时间复杂度为O(nlogn),而归并排序在所有情况下的时间复杂度都为O(nlog2n)。堆排序利用了完全二叉树的概念,保证排序效率。这些知识对于理解和优化算法性能至关重要。
摘要由CSDN通过智能技术生成

1.直接插入排序

每一趟将一个待排序的元素作为关键字,按照其关键字的大小插入到已经排好的部分序列的适当位置上。平均时间复杂度为O(n2),空间复杂度为O(1)。

void InsertSort(int R[], int n)
{
	if (R == nullptr || n<=0)
		return;
	int i, j;
	int temp;
	for (i = 1; i < n; ++i)
	{
		j = i - 1;
		temp = R[i];
		while (j >= 0 && R[j] > temp)
		{
			R[j+1] = R[j];
			--j;
		}
		R[j+1] = temp;
	}
}

2.冒泡排序

平均时间复杂度为O(n2),空间复杂度为O(1)

void BubbleSort(int R[], int n)
{
	if (R == nullptr || n <= 0)
		return;
	int i, j;
	int temp;
	int flag = 0;
	for (i = n; i >= 1; --i)
	{
		flag = 0;//每次重新置为0
		for (j = 1; j < i; ++j)
		{
			if (R[j - 1] > R[j])
			{
				temp = R[j];
				R[j] = R[j - 1];
				R[j - 1] = temp;
				flag = 1;//有数据交换,flag=1;
			}
		}

		if (flag == 0)
			return;
	}
}

3.快速排序

快速排序以枢轴为中心,将序列分成两部分。关键是枢轴的划分。

时间复杂度:最好的情况下为O(nlogn),最坏为O(n2)

空间复杂度:O(log2n)

递归算法:

void QuickSort(int R[], int low, int high)
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值