冒泡排序法(C语言实现)

冒泡排序是最简单的排序方法,它的计算次数多,不是最快的,但它是最基本的排序方法。

假设有一个整型数组:2,4,9,1,6,3,5,8,10,7; 要求把它们按从小到大的顺序依此排列。它的实现过程如下:

第一轮比较:从数组第一个元素到数组最后一个元素,相邻的两个元素的值进行比较,数组下标小的数的值大于数组下标大的元素的值时,便交换它们的值。如此下来,最大的值便被放到数组最后一个元素上。总共比较9次。

第一轮比较后的数组: 2,4,1,6,3,5,8,7,9,10

第二轮比较::重复上述步骤,相邻两个元素进行比较,但是这时比较的次数只有八次,因为已经确定最大的值是最后一个,所以无需进行比较。这样,第二大的数就排在数组倒数第二个元素上。

第二轮比较后的数组:2,1,4,3,5,6,7,8,9,10

第三轮比较::同样的,比较过后第三大的数排在倒数第三个元素上。

第三轮比较后的数组:1,2,3,4,5,6,7,8,9,10

可以看到经过三轮比较过后数组已经是满足题目要求的了,但是程序还是会继续进行下一轮比较,直到进行完第九轮(数组长度-1)比较后才停止比较。因此冒泡排序法是比较低效的,当数组原本就是有序时尤为明显。


最后一轮比较后的数组:1,2,3,4,5,6,7,8,9,10

冒泡排序法具体实现如下:

#include <stdio.h>

int main()
{
	int data[10] = {2,4,9,1,6,3,5,8,10,7};
	int tmp;
	int i, j;

	for (i=0; i<sizeof(data)/sizeof(int)-1; i++)		//外层循环,次数为数组长度减1
	{
		for (j=0; j<sizeof(data)/sizeof(int)-1-i; j++)	//内层循环,次数为数组长度减外层循环次数再减一
		{
			if (data[j] > data[j+1])		//如果数组下标为j的元素的值大于数组下标为j+1的元素的值
			{
				tmp 	  = data[j+1];		//把数组下标为j+1的元素的值存放在tmp中
				data[j+1] = data[j];		//把数组下标为j的元素的值赋给j+1
				data[j]   = tmp; 			//原来数组下标为j+1的元素的值赋给j
			}
		}
	}

	for (i=0; i<sizeof(data)/sizeof(int); i++)
	{
		printf("%d ", data[i]);
	}
	printf("\n");

	return 0;
}

已标记关键词 清除标记
©️2020 CSDN 皮肤主题: 深蓝海洋 设计师:CSDN官方博客 返回首页