冒泡排序算法

一、什么是冒泡排序法:

对于一组数据:3, 6 , 2 ,9 , 4, 7, 1, 0, 8, 5, 10,要将这些数据按照从小到大的顺序进行排序,可以使用冒泡排序法。

首先:将第一个数字和第二个数字进行排序,如果第一个数字大于第二个数字,交换位置。

其次:将第二个数字和第三个数字进行排序,如果二大于三,则交换位置。

最后,将倒数第二个和倒数第一个进行排序,如果倒数第二个大于倒数第一个,则交换位置。

这样操作之后,我就会把最大的数字排到最后面。

之后:我再从头开始,这回把第二大的排到倒数第二个位置上......最后我只需要找到倒数第二小的数字,相应的也就确定了最小的数字,整个数列排序完毕。

通过上面的例子我们可以发现:排最大的进行一轮,排第二大进行一轮,最后排第二小的进行一轮,总共进行了10轮。

每一轮中都是不同的位置上面进行比较,因此可以分析出来,外层循环的是轮数,内层循环的是位置(下标)

二、通过一个程序来理解:

//冒泡排序的案例
#include	<stdio.h>

int	main(void)
{
	int names[11]={3,6,2,9,4,7,1,0,8,5,10};
	int dates[11];
	
	for (int i=0;i<11;i++)
	{
		dates[i]=names[i];
	}
	int out_i;
	int in_i;
	for (out_i=0;out_i<10;out_i++)//out_i是轮数
	{
		for (in_i=0;in_i<10-out_i;in_i++)	//in_i表示的是位置,in_i最后所抵达的位置和轮数有关,例:第一轮比较出最大的了,
		//第二轮就不用和最后位置进行比较,因此相应的位置也减少一位,即减去轮数。每次都从第一个开始,所以初始值是0 ,当
            //out_i=0时,in_i+1最大到最后一个,in_i也就是只能到倒数第二个,也就是位置9,此时是<10-0。
		{
			if(dates[in_i]>dates[in_i+1])
			{
				int agent;
				agent=dates[in_i];
				dates[in_i]=dates[in_i+1];
				dates[in_i+1]=agent;
			}	
		} 
	}
	printf("print the changed array:\n");
	for (int n=0;n<11;n++)
	{
		printf("dates[%d]=%d\n",n,dates[n]);
	}
	printf("print the original array:\n");
	for(int n=0;n<11;n++)
	{
		printf("names[%d]=%d\n",n,names[n]);
	}
	 
	 return	0; 
 } 

打印结果如下:

print the changed array:
dates[0]=0
dates[1]=1
dates[2]=2
dates[3]=3
dates[4]=4
dates[5]=5
dates[6]=6
dates[7]=7
dates[8]=8
dates[9]=9
dates[10]=10
print the original array:
names[0]=3
names[1]=6
names[2]=2
names[3]=9
names[4]=4
names[5]=7
names[6]=1
names[7]=0
names[8]=8
names[9]=5
names[10]=10

posted @ 2021-12-17 23:58  OldSword-JY  阅读(193)  评论(0)    收藏  举报