码迷,mamicode.com
首页 > 编程语言 > 详细

选择类排序总结

时间:2016-11-26 02:09:17      阅读:123      评论:0      收藏:0      [点我收藏+]

标签:利用   多次   情况   时间   简单选择   过程   pre   维护   void   

选择类排序总结

所谓选择类排序的思想就是:从数组的中选出最大或最小的,通过多次选择最后达到排序的目的

 

首先是简单选择排序

思想:每趟扫描中,选出最小的数字放在最前面,然后从第二个数字开始扫描,直到只剩下最后一个数不需要扫描

void EasySelect_Sort(int a[],int n)
{
	int k;
	for(int i=1;i<n;i++)
	{
		k=i-1;
		for(int j=i;j<n;j++)
		{
			if(a[j]<a[k])
			{
				k=j;
			}
		}
		if(k!=(i-1))
		{
			int temp=a[i-1];
			a[i-1]=a[k];
			a[k]=temp;
		}
	}
}

  

经过分析可以得到,最坏时间复杂度为O(n2),最好时间复杂度为O(n2)

空间复杂度为O(1);

简单选择排序是不稳定的!,例如3,3,2

 

 

 

二.堆排序

上面的简单选择排序中,一趟只能选出一个最大的,一趟比较完之后第二趟重新开始比较,这样一来,第一趟比较时的结果就浪费了,我们如果能够将他们利用起来的话,可想而知,可以提高不少效率,堆排序就是在这样的情况下提出来的

 

堆排序通过维护堆的数据特点,来实现排序,所谓堆,分为大根堆和小根堆,大根堆就是,根节点大于左子结点且根节点大于右子结点(a[i]>=a[2i]&&a[i]>=a[2i+1])

我们以大根堆为例,分析,堆排序的过程:

堆排序分为:维护堆,建立堆,堆排序三个过程

 

所谓维护堆:

 

选择类排序总结

标签:利用   多次   情况   时间   简单选择   过程   pre   维护   void   

原文地址:http://www.cnblogs.com/YTYMblog/p/6103203.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!