算法之排序算法(冒泡法和选择法)

本篇文章中,都以十个数排序为例子讲解。

冒泡法是依次从后面确定,而选择法则是依次从前面确定。也就是说,冒泡法先确定最后一个数,再确定倒数第二个,再确定……;选择法先确定第一个数,再确定第二个数,再确定……

1.冒泡法

       冒泡法的本质就是将数组中的数字依次两两比较,最后按照由小到大或者由大到小排序。冒泡法的代码基本是两层排序组成,第一层表示趟数,因为是两两比较,所以十个数字需要九躺就可以排完。(例如4,9,3三个数字,需要两趟,第一趟中4和9比较,顺序不变,然后9和3比较,换序;第二趟是4和3比较,换序,这样就变成了3,4,9的顺序);第二层循坏就是比较大小。

# include <stdio.h>
int main ()
{
	int arr[10]={12,23,123,45,678,89,90,679,999,10};
	//冒泡法(从小到大) 
	for(int i=0;i<9;i++)               //排序主体
	{
		for(int j=0;j<9-i;j++)
		{
			if(arr[j]>arr[j+1])
			{
				int temp;
				temp=arr[j];
				arr[j]=arr[j+1];
				arr[j+1]=temp;
			}
		}
	} 
	for(int i=0;i<10;i++)              //输出
	{
		printf("%d ",arr[i]);
	}
	return 0;
} 
# include <stdio.h>
int main ()
{
	int arr[10]={12,23,123,45,678,89,90,679,999,10};
    //冒泡法(从大到小)
	for(int i=0;i<9;i++)                //排序主体
	{
		for(int j=0;j<9-i;j++)
		{
			if(arr[j]<arr[j+1])
			{
				int temp;
				temp=arr[j];
				arr[j]=arr[j+1];
				arr[j+1]=temp;
			}
		}
	}
	for(int i=0;i<10;i++)               //输出
	{
		printf("%d ",arr[i]);
	}
	return 0;
} 

2.选择法

       选择法的本质是在数组中的一个数,依次和其他数比较,换序,最后按照从小到大或者从大到小排序即可。选择算法也是两层循环嵌套,但和冒泡法还是有区别的,第一层循环是数组中的数,第二层循坏是数组中的其他数,通过比较,换序,最后输出。(例如,4,9,3,第一层选择4,然后第二层中和9比较,不换序,然后和3比较,换序,这样第一个数变成了3;再重新循环,9和4比较,换序,然后就排好了,3,4,9)。

# include <stdio.h>
int main ()
{
	int arr[10]={12,23,123,45,678,89,90,679,999,10};
	//选择法(从大到小)
	 for(int i=0;i<10;i++)            //选择法主体
	{
		for(int j=i+1;j<10;j++)
		{
			if(arr[i]<arr[j])
			{
				int temp;
				temp=arr[i];
				arr[i]=arr[j];
				arr[j]=temp;
			}
		}
	} 
	for(int i=0;i<10;i++)             //输出
	{
		printf("%d ",arr[i]);
	}
	return 0;
} 

 

# include <stdio.h>
int main ()
{
	int arr[10]={12,23,123,45,678,89,90,679,999,10};
    //选择法(从小到大) 
	for(int i=0;i<10;i++)              //选择法主体
	{
		for(int j=i+1;j<10;j++)
		{
			if(arr[i]>arr[j])
			{
				int temp;
				temp=arr[i];
				arr[i]=arr[j];
				arr[j]=temp;
			}
		}
	} 
	for(int i=0;i<10;i++)             //输出
	{
		printf("%d ",arr[i]);
	}
	return 0;
} 

 

 

 

评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

王彬泽

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值