选择类排序总结
所谓选择类排序的思想就是:从数组的中选出最大或最小的,通过多次选择最后达到排序的目的
首先是简单选择排序
思想:每趟扫描中,选出最小的数字放在最前面,然后从第二个数字开始扫描,直到只剩下最后一个数不需要扫描
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])
我们以大根堆为例,分析,堆排序的过程:
堆排序分为:维护堆,建立堆,堆排序三个过程
所谓维护堆:
时间: 2024-10-14 00:31:44