排序算法分析:简单选择排序

1. 算法思想:

简单选择排序是通过每次遍历待排序序列,选出一个最小的放在起始位置(假设我们要得到递增序列),这样在经过n-1趟处理后,最终可以得到有序序列

2. 算法实现:

void Simple_sort(int a[],int len)
{
	for (int i = 0; i < len; i++) 
	{
		int min = i;//记录最小位置的数组元素的下标,便于最后的交换
		for(int j=i+1;j<len;j++)
		{
			if (a[j] < a[min]) { min = j; }
		}
		swap(a[i], a[min]);
	}
}

需要注意的是:

1. 第五行代码 min = i,这里记录的是最小位置元素的下标,如下是错误写法:

void Simple_sort1(int a[],int len)
{
	for (int i = 0; i < len - 1; i++)
	{
		int min = a[i];//错误写法,这样最终只是交换了最小值和a[i],而不是交换了最小值所在的位置和a[i]的位置
		for (int j = i + 1; j < len; j++)
		{
			if (a[j] < min)
			{
				min = a[j];
			}
		}
		swap(min, a[i]);
	}
}

错误原因在于:这里存储的是最小值而不是最小值元素的数组下标,这样做会导致在最后交换的时候,交换的不是数组序列中的元素,而是直接将起始元素以最小值覆盖

3. 算法复杂度分析:

①空间复杂度:只设立了用于遍历循环的辅助变量,因此空间复杂度为O(1)

②时间复杂度:无论关键字有序还是逆序,一定需要进行n-1趟处理,对比关键字的总次数是:

(n-1)+(n-2)+...+2+1 = n(n-1)/2次,即时间复杂度为O(n2) 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值