排序算法——选择排序

从0~n-1个元素中选择最小的元素,与第0个元素交换;从1~n-1个元素中选择最小的元素,与第一个元素位置交换,依次类推。(选择排序和冒泡排序比较近似,可对照学习)

选择排序相较冒泡排序,移动的次数较少,所以选择排序比冒泡排序效果更好点。

//选择排序
void selectSort(pArrayList list)
{
	int minIndex;
	int tmp;
	//起始位置不断递增
	for(int i=0;i<list->length;i++)
	{
		//找出从起始位置到最后一个元素的最小值,并返回它的位置  
		minIndex=selectMiniElem(list,i);//i表示起始位置
		if(minIndex!=i)//如果二者位置不等,则交换它们 
		{
			tmp=list->data[i];
			list->data[i]=list->data[minIndex];
			list->data[minIndex]=temp;
		}
	}
}

//返回i~length中最小的元素的下标  
int selectMiniElem(pArrayList list,int index)
{
	//min初始为很大的数  
    int min = 100000;  
    int minIndex;  
	for(int i=index;i<list->length;i++)
	{
		if(list->data[i]<min)
		{
			min=list->data[i];
			minindex=i;
		}		
	}
	return minindex;
}

//C++精简版

 int temp;
	int a[8] = {2,3,1,6,4,7,0,8};
	for (int i = 0; i < 8; i++)
	{
		int m = i;
		for (int j = i + 1; j < 8; j++)
		{
			if (a[j] < a[m])
			{
				m = j;
			}
		}
		temp = a[i];
		a[i] = a[m];
		a[m] = temp;
		cout << a[i] << " ";
	}

注:选择排序与冒泡排序的异同:

选择排序:每次找到最小的元素,但是它只是将最小元素与首位元素交换位置;

冒泡排序:每次找到最大的元素,但是在查找的过程中需要不断地移动元素的位置。

选择排序相较冒泡排序,移动的次数较少,所以选择排序比冒泡排序效果更好点。


  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值