【C语言提高01】冒泡排序和数组做参数的问题

 //冒泡排序
 //外层循环
 //当i=0时  从j从1-->N进行变化
 //当i=1时  从j从2-->N进行变化
 //当i=2时  从j从3-->N进行变化
 //........

  //结论: 摁着一个变量i不变  让另外一个变量j进行轮循   那个不变的数组地址用来放最小的数值   下一轮依次进行
 //            也就是谁小谁放到那个a[i]上面
#include<stdlib.h>
#include<stdio.h>
#include<string.h>

//排序
void main21()
{
	int i = 0, j = 0;
	int tmp = 0;
	int a[] = {522,200,350,4,8,9,12};
	printf("排序之前:");
	for (i = 0; i < 7; ++i)
	{
		printf("%d  ",a[i]);
	}

        for (i = 0; i < 7; i++)//外层:比较多少趟   n-1躺
	{
		for (j = i + 1; j < 7; j++)//内层比较  找到一个最小的
		{
			if (a[i] > a[j])//两个地址上的数值对比 成立  两个地址交换数值
			{
				tmp = a[i];  //a[i]的地址永远用来放最小的数
				a[i] = a[j];
				a[j] = tmp;
			}
			//每循环一次  对应的a[i]地址都放好了最小的数值
		}
	}
	printf("排序之后:");
	for (i = 0; i < 7; ++i)
	{
		printf("%d  ", a[i]);
	}
	printf("hello...\n");
	system("pause");
}



//数组做参数的退化问题 会退回一个指针
//结论:1.把数组的首地址和有效长度传给被调用函数
//           2.实参a和形参a的数据类型的本质不一样
//              形参中的数组  编译器会把他当成指针处理  只是c的特色
//           3.形参写在函数括号内和写在函数内是一样的  只不过前者有对外的属性而已
#include<stdlib.h>
#include<stdio.h>
#include<string.h>
oid printArray(int a[],int num)//作为形参的数组在编译器看了不过就是指向该数组首元素的指针
{
  int i = 0;
  for (i = 0; i < num; ++i)
	{
		printf("%d  ", a[i]);
	}

}

//void sortArray(int a[],int num)
void sortArray(int *a, int num)
{
      /*int num2;
	num2 = sizeof(a) / sizeof(a[0]);   //计算的是这个指针的长度  并不是数组的长度
	printf("%d",num2);       */        //num2的结果并不是数组的长度  而是为1  证明了传进来的并不是数组  而是指向数组首元素的指针
	
        int i = 0, j = 0;
	int tmp = 0;
  
	for (i = 0; i < num; i++)
	{
		for (j = i + 1; j < num; j++)
		{
			if (a[i] > a[j])
			{
				tmp = a[i];  
				a[i] = a[j];
				a[j] = tmp;
			}
		
		}
	}
}


void main()
{
	int num;
	int a[] = { 522, 200, 350, 4, 8, 9, 12 };
	num = sizeof(a)/sizeof(a[0]);
	printf("排序之前:");
	printArray(a,num);

	sortArray(a,num);

	printf("排序之后:");
	printArray(a,num);

	printf("hello...\n");
	system("pause");
}
























评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值