例题:
将一组整数从大到小排列
思路:
冒泡排序的功能----排序,俩俩比较,交换位置。
重点弄清楚它是几趟,每趟比较几次----采用for循环
代码:
#include<stdio.h>
void mppx(int arr[], int n)
{
int i = 0;
for (i = 0; i < n - 1; i++)
{
//int flag=1;
int j = 0;
for(j=0;j<n-i-1;j++)
{
if (arr[j] < arr[j + 1])
{
int temp = arr[j];
arr[j] = arr[j + 1];
arr[j + 1] = temp;
flag=0;
}
}
// if (flag == 1)
//break;
}
}
int main()
{
int arr[] = { 9,8 ,7,2,5,6,19,17,16,20 };
int sz = sizeof(arr) / sizeof(arr[0]);
int i = 0;
mppx(arr, sz);
for (i = 0; i < sz; i++)
printf("%d ", arr[i]);
}
关键点:
1.sizeof(数组名)是计算整个数组的大小
2.关于for循环中中间条件的设置–冒泡排序中一个常见的写法对一个不断变化的量—我代码中的那个i–利用n-i
3.一个改进点:
如果本身是一个满足条件的从大到小排的一组数,那么同样采用这样俩俩对比的方法来排那就有一点小死板,可以稍做改进,在内部加入flag以确定这一趟是否需要多次俩俩比较(也就是以上代码中//后面内容)
4.传入函数的时候,得告诉它是数组–int arr【】–这个方块不能少(我开始就这里出问问问题)