冒泡排序(数字)

冒泡排序(个人练习理解)

冒泡排序,即依次比较相邻的两个元素,根据要求顺序进行排序,不符合顺序的话进行交换。直到没有需要交换的为止。

例:2,3,1,5,9,8 (小到大)

需要从第一位开始与相邻的比较(即数组下标0),2<3,不用交换,再以第二位与第三位比较,接着按顺序继续比较,即判断a[i]与a[i+1]。;
即第一趟:2,1,3,5,8,9
之后以前一趟的结果继续进行相邻比较。
第二趟:1,2,3,5,8
无交换即排序完成。

C#代码

//c#代码
string str=Console.ReadLine();//输入
string [] strarray=str.Split(" ");//以空格为分隔
int []  target=new int[strarry.Length];//定义另一个数组以保存排序后的数组
for(int i=0;i<strarray.Length;i++)
{
	target[i]=int.Phase(strarray[i]);//phase将字符串转换为其他数据类型
}
//确定循环趟数,在运算过程最多是会有length-1趟
for(int i=0;i< target.Length-1;i++)
{
	for(int j=0;j<target.Length-1 ;j++)//不断相邻比较,在最后一位时,若+1将超出数组,所以要length-1;
	{
		if(target[j]>target[j+1])
		{
			int temp=0;
			temp=target[j];
			target[j]=target[j+1];
			target[j+1]=temp;
		}	
	}
}
//另一种。可见每趟过后最大的都将排到最后,我们可以在每一趟过后,
//再次排序的时候,不去管最后一位,即下一次排序时少一位
//此时,比较时的次数就要与趟数有关了如下(另外在第一种j的for循环中将j<target.Length-1再减i是同样的效果)
for(int i=target.Length;i>0;i--)
{
	for(int j=0;j<i-1;i++)
	{
		if(target[j]>target[j+1])
		{
			int temp=0;
			temp=target[j];
			target[j]=target[j+1];
			target[j+1]=temp;
		}	
	}
}

//遍历输出数组target即可
foreach(int i to target)
{
	Console.Write(i);
}

优化

看上面的例子,可见第二趟就可以结束了,但上面代码虽然是优化了让每次去掉最后一位,但排完序后,它可能还会继续比较,此时我们要想办法去确定没有进行交换的了。

//以上面没写的情况为例
for(int i=0;i< target.Length-1;i++)
{
	//定义一个变量表示是否发生交换,每一趟开始前,先重置为没有发生交换
	bool change=false;//也可以用其他数据类型表示
	for(int j=0;j<target.Length-1-i ;j++)//每次都会使最后一位去掉;
	{
		if(target[j]>target[j+1])//交换
		{
			int temp=0;
			temp=target[j];
			target[j]=target[j+1];
			target[j+1]=temp;
			//发生交换 ,将change的值改变
			change=true;//表示有变换
		}
		//在运行比较后发现没有交换,此时说明排序完成,直接跳出循环即可。
		if(change==false)
			break;//跳出整个循环。	
	}
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值