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

来源:互联网 发布:12345数字打字软件 编辑:程序博客网 时间:2024/06/15 22:33
 //冒泡排序
 //外层循环
 //当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");}
























0 0
原创粉丝点击