冒泡法排序——(数组做实参)

本文详细介绍了一种简单的排序算法——冒泡排序。通过不断比较相邻元素并进行必要的交换,最终实现数组元素的升序排列。文章提供了完整的C语言实现代码,并解释了其中的循环嵌套逻辑。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

冒泡排序: 不断地把较大的数据移动到后面(比较),有写类似于水中的气泡向上冒的过程(越来越大)

算法分析

1、因为要对一个Int 类型的数组排序,所以解决问题的前提有条件是知道数组名及数组元素
也就是说函数应该有两个参数。
2、函数的功能是对数组排序,结束后并没有什么特定的值要返回给调用函数的地方,
所以函数的类型应该是void类型(如果需要记录交换次数,也可以把交换次数作为一个int 返回)
3、排序的过程时是经过若干趟完成的,且而每一趟都需要比较若干次,这样就构成了一个循环。
排序的若干趟循环次数为元素个数—1;每趟都是若干次比较,这也是一个循环,这样就构成一个循环嵌套。

4、比较都是前后两个元素而言的,如果前面元素用下标qian,后面元素下标hou比qian大1。
循环次数与第几趟有关

//冒泡排序——数组名做实参

#include<stdio.h>
void sort(int[],const int);
int main()
{
	int elements[7]={5,18,9,6,4,7,45	};
sort(elements,7);
	return 0;
	
}

//排序函数
void sort(int elements[],const int num )  
{
	int djt;  //第几趟 
	for(djt=1;djt<num;djt++)  //共num-1趟
	{
		int qian,hou;
		for(qian=0;qian<num-djt;qian++)
		{
			hou=qian+1;
			//比较前后元素大小,并将较大的放hou里,较小的放qian里
			if(elements[qian]>elements[hou])
			{
				int tmp;
				tmp=elements[qian];
				elements[qian]=elements[hou];
				elements[hou]=tmp;
			} 
			
		}
	} 
	//输出 
	int i;
	printf("冒泡排序结果为:");
	for(i=0;i<num;i++)  //共num-1趟
	printf("%d"" ",elements[i]) ;  //这里不是elements,因为数组调用就是地址 
} 
### 数组作为函数实参的用法 在C语言中,数组可以作为函数的实际参数(即实参递给另一个函数。需要注意的是,在这种情况下,实际上递给函数的是指向数组第一个元素的指针[^1]。 #### 单维数组作为函数参数 当单维数组作为函数参数时,可以通过以下方式实现: - **形式参数声明**:可以用 `type arrayName[]` 或者 `type *arrayName` 来表示数组类型的形参。 - **注意点**:尽管使用了方括号 `[]` 声明数组,但实际上入的是数组的第一个地址,因此形参本质上是一个指针变量[^2]。 下面是一个具体的例子,展示如何将单维数组作为实参递并操作其内容: ```c #include <stdio.h> void modifyArray(int arr[], int size) { for (int i = 0; i < size; ++i) { arr[i] *= 2; // 将每个元素乘以2 } } int main() { int numbers[] = {1, 2, 3, 4, 5}; int length = sizeof(numbers) / sizeof(numbers[0]); printf("Before modification:\n"); for (int i = 0; i < length; ++i) { printf("%d ", numbers[i]); } modifyArray(numbers, length); printf("\nAfter modification:\n"); for (int i = 0; i < length; ++i) { printf("%d ", numbers[i]); } return 0; } ``` 在这个程序中,`modifyArray()` 函数接收一个整型数组及其长度作为参数,并将其所有元素加倍[^3]。 #### 多维数组作为函数参数 对于多维数组来说,情况稍微复杂一些。特别是二维数组,通常需要指定每一行的宽度以便编译器能够正确计算偏移量[^4]。 ##### 示例代码如下: ```c #include <stdio.h> // 定义处理二维数组的函数 void processMatrix(int matrix[][3], int rows) { for (int i = 0; i < rows; ++i) { for (int j = 0; j < 3; ++j) { matrix[i][j]++; } } } int main() { int mat[2][3] = {{1, 2, 3}, {4, 5, 6}}; printf("Original Matrix:\n"); for (int i = 0; i < 2; ++i) { for (int j = 0; j < 3; ++j) { printf("%d ", mat[i][j]); } printf("\n"); } processMatrix(mat, 2); printf("Modified Matrix:\n"); for (int i = 0; i < 2; ++i) { for (int j = 0; j < 3; ++j) { printf("%d ", mat[i][j]); } printf("\n"); } return 0; } ``` 这里展示了如何向函数递二维数组,并对其内部数据进行修改[^5]。 --- ### 关键概念总结 - 当数组作为函数参数时,实际上只递了首地址而非整个数组副本。 - 对于一维数组而言,既可以采用 `type array[]` 的语法也可以利用 `type *array` 表达相同含义。 - 高维度数组则需明确各维度的具体尺寸信息才能正常工作。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值