数据结构--向量--选择排序

   现在来看一看一种常规的排序算法,选择排序。

本页内容

 1.选择排序的原理

 2.代码实现

 3.在向量模板中实现

 4.总体评价

1.选择排序的原理

     选择排序是通过重复将未扫描的数列中最大元素选出,使之向后就位,最后将整个数列排为有序为止。可看下图实例:

      

2.代码实现

#include<iostream>
using namespace std;
void selectionSort(int *A,int lo,int hi)
{
	int temp;//中间交换元素 
	int sL=hi;//扫面长度 
	for(int i=lo;i<hi;i++)// 
	{
		int max=lo;//最大值下标 
		for(int j=lo;j<sL;j++)
		{
			if(A[max]<A[j])
		   {
			max=j; 
		   }
		}
		sL--;//每扫面一次,搜索区间减少1位
		//交换,使扫描区间中最大元素就位 
		temp=A[max];
		A[max]=A[sL];
		A[sL]=temp;
	}
}
int main()
{
	/***********测试*********/
	int a[10];
	cout<<"测试数组为:";
	for(int i=0;i<10;i++)
	{
		a[i]=9-i;
		cout<<a[i]<<" "; 
	} 
	cout<<endl;
	selectionSort(a,0,10);
	cout<<"selectionSort后:";
	for(int i=0;i<10;i++)
	{
		cout<<a[i]<<" ";
	} 
	/***********************/
	return 0;
} 
      运行结果:

       

3.在向量模板中实现

template<typename T>
void myVector<T>::selectionSort(Rank lo,Rank hi)
{
	Rank sL=hi;//扫面长度 
	for(Rank i=lo;i<hi;i++)// 
	{
		Rank max=lo;//最大值下标 
		for(Rank j=lo;j<sL;j++)
		{
			if(_elem[max]<_elem[j])
		   {
			max=j; 
		   }
		}
		sL--;//每扫面一次,搜索区间减少1位
		swap(_elem[max],_elem[sL]);//交换,使扫描区间中最大元素就位 
	}
} 

4.总体评价

   选择排序的复杂度虽然为O(n^2),但它却比起泡排序要好不少。起泡排序可以说是一种特殊的选择排序,但其交换的次数实在是太多了(相邻两个元素一逆序就换)。而向上述的这种选择排序的算法每次扫面只交换一次( swap(_elem[max],_elem[sL])  ),这就是它比起泡排序效率高的地方。


想要学习更多关于向量的知识,请点击!!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值