冒泡排序
作用: 最常用的排序算法,对数组内元素进行排序
步骤
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;
}