排序算法学习系列-冒泡排序

冒泡排序

作用: 最常用的排序算法,对数组内元素进行排序

步骤

1. 比较相邻的元素。如果第一个比第二个大,就交换他们两个。
2. 对每一对相邻元素做同样的工作,执行完毕后,找到第一个最大值。
3. 重复以上的步骤,每次比较次数-1,直到不需要比较

注意两个循环参数
第一个:排序总轮数等于数组中元素个数减一;
第二个:每轮比较次数等于数组中元素个数减一再减去第几轮次;

void sort_maopao(int aa[], int len)
{
	cout << "冒泡排序前" << endl;
	for (int i = 0; i < len; i++)
	{
		cout << aa[i];
	}
	cout << endl;
	//冒泡排序
	for (int i = 0; i < len - 1; i++)
	{
		for (int j = 0; j < len - 1 - i; j++)
		{
			if (aa[j] > aa[j + 1])
			{
				int tmp = aa[j];
				aa[j] = aa[j + 1];
				aa[j + 1] = tmp;

			}


		}
	}

	cout << "冒泡排序后" << endl;
	for (int i = 0; i < len; i++)
	{
		cout << aa[i];
	}
	cout << endl;
}

注意要点

如果写一个传数组的函数,却不传递数组长度,那么在函数里计算数组的长度时,我们会发现长度的值一直是2,因为,数组名a是函数参数,到了本函数中,数组名a只是一个指针(地址,系统在本函数运行时,是不知道a所表示的地址有多大的数据存储空间,这里只是告诉函数:一个数据空间首地址),所以,sizoef(a)的结果是指针变量a占内存的大小,一般在64位机上是8个字节。int类型是4个字节,所以,结果永远是2,因此,我们要向获取数组长度要怎么办呢,可以在初始化数组的地方获取到数组的长度,作为参数传递过来:


void sort_maopao(int aa[])
{
	cout << "冒泡排序前" << endl;
	
	int len=sizeof(&aa)/ sizeof(int);

	for (int i = 0; i < len; i++)
	{
		cout << aa[i];
	}
	cout << endl;
	//冒泡排序
	for (int i = 0; i < len - 1; i++)
	{
		for (int j = 0; j < len - 1 - i; j++)
		{
			if (aa[j] > aa[j + 1])
			{
				int tmp = aa[j];
				aa[j] = aa[j + 1];
				aa[j + 1] = tmp;

			}


		}
	}

	cout << "冒泡排序后" << endl;
	for (int i = 0; i < len; i++)
	{
		cout << aa[i];
	}
	cout << endl;
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章