选择,冒泡排序

 冒泡排序的思想很简单,如果要求排序后序列中元素按照从小到大的顺序排列,则冒泡排序的步骤如下:

    1、依次比较序列中相邻的两个元素,将较大的放在后面,这样一趟比较后,最大的元素就放在了最后的一个位置;

    2、再依次比较相邻的两个元素,将第二大的元素最终放到倒数第二个位置;

    3、依次循环,直到最小的元素放在了第一个位置,排序完成。

void bubble_sort(int *arr,int len)
{
	int i,j,exc;
	for(i=0;i<len-1;i++)
		for(j=0;j<len-i-1;j++)
		if(arr[j]>arr[j+1])
		{
			exc=arr[j];
			arr[j]=arr[j+1];
			arr[j+1]=exc;
		}
}

改进:
void bubble(int *arr,int len)
{
	int i,j ,exc;
	bool flag=true; //增设标志位,判断是否已经完成排序
	for(i=0;i<len-1&&flag;i++)
	{
		flag=false;
		for(j=0;j<len-i-1;j++)
		if(arr[j]>arr[j+1])
		{
			//如果本趟比较没有数据发生交换,说明排序已经完成  
                //则flag一直为false,从而退出循环,不再进行下一趟的比较
			exc=arr[j];	
			arr[j]=arr[j+1];
			arr[j+1]=exc;
			flag=true;
		}		
		
	}
}

直接选择排序

    直接选择排序的思想也很简单,以排序从小到大为例,如下:

    1、从第一个元素开始,选出一个最小的元素与第一个元素互换;

    2、继续从第二个元素开始,向后选出最小的元素,与第二个元素互换;

    3、依次循环执行,直到最大的元素放在了最后一个位置上,排序完成。

    我们可以将第一个元素分别与后面的元素进行比较,遇到更小的,就交换,这样一趟比较下来,第一个元素保存就是最小值,而后再从第二个元素开似乎,依次与后面的元素比较,遇到更小的,就交换,这样,第二趟比较下来,第二个元素保存的就是第二小的值。。。依次循环执行,直到完成排序。


void select_sort(int *arr,int len)
{
	int i,j;
	for(i=0;i<len;i++)
		for(j=i+1;j<len;j++)
		{
			if(arr[i]>arr[j])
			{
				int exc=arr[i];
				arr[i]=arr[j];
				arr[j]=exc;
			}
		}
}

改进:
void select_sort(int *arr,int len)
{
	int i,j,min;
	for(i=0;i<len;i++)
	{
		min=i;//用来记录每一趟比较的最小值的位置  
		for(j=i+1;j<len;j++)
			if(arr[min]>arr[j])
				min=j;//仅记录最小值的位置  
        //如果最小值的位置发生了变化,  
        //则最后执行一次元素互换的操作  
	if(min!=i)
	{
		int exc=arr[i];
		arr[i]=arr[min];
		arr[min]=exc;
	}
	}


}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值