冒泡序列,何为冒泡序列
就是把一些例如{2,34,5,62,334,5,45343,4}
等一些乱码数字按照从小到大或者从大到小的顺序依次排列
原理:如果有1,2,3,4,5,6,7,8,9,10 要求按照从大到小的顺序排列
首先我们肯定要用一个循环,1和2比一次 现在变成了:2,1,3,4,5,6,7,8,9,10
1和3比一次 现在变成了:2,3,1,4,5,6,7,8,9,10;
1和4比一次 现在变成了:2,3,4,1,5,6,7,8,9,10;
一套冒泡序列下来:10,2,3,4,5,6,7,8,9,1;
然后又拿2去跟后面的数字比较直到变成了
10,9,,8,7,6,5,4,3,2,1;
值得注意的是其实我们只需要比九次就可以了
十个数字 排列九次 另外一个数字自然而然就可以了;
但在这我想要将数组当做一个函数来操作{1,2,3,4,5,6,7,8,9,10};
最终排列成{10,9,8,7,6,5,4,3,2,1};
void bubble(int arr[]) {
int sz = sizeof(arr) / sizeof(arr[0]);
int i = 0;
int j = 0;
for (i = 0;i < sz - 1;i++) {
for (j = 0;j < sz - 1 - j;j++) {
if (arr[j] < arr[j + 1]) {
int tam = arr[j];
arr[j] = arr[j + 1];
arr[j + 1] = tam;
}
}
}
}
int main() {
int arr[] = { 1,2,3,4,5,6,7,8,9,10 };
bubble(arr);
int i = 0;
int sz = sizeof(arr) / sizeof(arr[0]);
for (i = 0;i < 10;i++) {
printf("%d ", arr[i]);
}return 0;
}
观察上述的代码我们发下完全没问题,但是一编译
为什么呢???
所以我们将函数改一下
发现就可以了
但是这边也引出来了一个问题
为什么之前的那个不可以?
数组名是什么??——就是arr
我们打印地址 可以看到 数组名 和数组的第一个元素地址和取整个数组的地址是想相同的
但真的一样吗?
为什么这个又是四十呢???
不是说元素首地址嘛?如果真的是元素首地址的话应该是4
所以总结:
动动小手点赞啊 xdm