首页 > 其他分享 >冒泡、选择排序;二维数组;函数三要素,形参实参

冒泡、选择排序;二维数组;函数三要素,形参实参

时间:2024-03-20 16:58:05浏览次数:25  
标签:tmp 12 形参 int len 冒泡 printf 实参 array

  • 冒泡排序法

    012max
    08,12,13,98,12,13,98,12,9,1313
    18,12,98,9,1212
    28,99
    3

    第一轮从前往后两两比较,4个元素比较3次,得出最大值为13。

    第二轮,3个元素比较2次,最大值为12。

    第三轮,2个元素比较1次,最大值为9。

    通过简单较少的数据推导得出结论,i个元素需要比较i-1轮,第j轮需要比较i-1-j次。

    #include <stdio.h>
    /*
    冒泡排序法:
    假设有一个数组array[ ]={12,8,13,9};
    对其中元素进行排序并分别正逆序输出。
    */
    
    int main()
    {
    	int array[]={12,8,13,9};
    	int i;
    	int j;
    	int len;
    	int tmp;
    
    	len = sizeof(array)/sizeof(array[0]);
    
    	for(i=0;i<len-1;i++){
    		for(j=0;j<len-1-i;j++){
    			if(array[j]>array[j+1]){//如果大于就交换
    				tmp=array[j];
    				array[j]=array[j+1];
    				array[j+1]=tmp;
    			}
    		}
    	}
    	puts("从小到大打印:");
    	for(i=0;i<=len-1;i++){
    		printf("%d,",array[i]);
    	}
    	puts("\n从大到小打印:");
    	for(i=len-1;i>=0;i--){
    		printf("%d,",array[i]);
    	}
    	
    	return 0;
    }
    

    自己输入数据

    #include <stdio.h>
    /*
    冒泡排序法:
    自己输入一个数组。
    对其中元素进行排序并分别正逆序输出。
    */
    int main()
    {
    	int i;
    	int j;
    	int tmp;
    	
    	int len;
    	printf("请输入数组元素个数:\n");
    	scanf("%d",&len);
    	int array[len];
    	
    	puts("请输入数组元素:");
    	for(i=0;i<len;i++){
    		scanf("%d",&array[i]);
    	}
    	//len = sizeof(array)/sizeof(array[0]);
    
    	for(i=0;i<len-1;i++){
    		for(j=0;j<len-1-i;j++){
    			if(array[j]>array[j+1]){//如果大于就交换
    				tmp=array[j];
    				array[j]=array[j+1];
    				array[j+1]=tmp;
    			}
    		}
    	}
    	puts("从小到大打印");
    	for(i=0;i<=len-1;i++){
    		printf("%d,",array[i]);
    	}
    	puts("\n从大到小打印");
    	for(i=len-1;i>=0;i--){
    		printf("%d,",array[i]);
    	}
    	
    	return 0;
    }
    
  • 简单排序法

    #include <stdio.h>
    /*
    简单排序法
    依次比较,把最大的放在前面
    */
    
    int main()
    {
    	int i;
    	int j;
    	int tmp;
    	int len ;
    	int array[]={8,12,13,9};
    	len = sizeof(array)/sizeof(array[0]);
    	for(i=0;i<len-1;i++){
    		for(j=i+1;j<len;j++){
    			if(array[i]<array[j]){
    				tmp=array[i];
    				array[i]=array[j];
    				array[j]=tmp;
    			}
    		}
    	}
    	printf("从大到小为:");
    	for(i=0;i<len;i++){
    		printf("%d ",array[i]);
    	}
    	return 0;
    }
    
  • 二维数组

    #include <stdio.h>
    /*
    二维数组  array[i][j]:一个i行j列的二维数组
    */
    
    int main()
    {
    	int array[2][3]={111,222,333,444,555,666};
    	int array1[2][3]={{111,222,333},{444,555,666}};
    	
    	for(int i=0;i<2;i++){
    		for(int j=0;j<3;j++){
    			printf("%p %d ",&array[i][j],array[i][j]);
    		}
    		putchar('\n');
    	}
    
    	return 0;
    }
    
  • 二维数组初始化

    可以对二维数组中的某几个元素赋值,其他的元素默认为0。

    int array[3][4]={{1},{2},{3}};
    

    在这里插入图片描述

  • 如果对全部元素都赋初值(即提供全部初始数据),则定义数组时对第1维的长度可以不指定,但第2维的长度不能省略。

    int a[3][4]={1,2,3,4,5,6,7,8,9,10,11,12};
    //与下面的定义等价
    int a[][4]={1,2,3,4,5,6,7,8,9,10,11,12};
    
  • 找最大值

    #include <stdio.h>
    /*
    有一个3*4的矩阵,要求编程求出其中最大的那个元素值,
    以及其所在的行号和列号。
    */
    
    int main()
    {
    	int a[3][4]={1,0,4,8,6,9,12,7,9,10,11,3};
    	int i;
    	int j;
    	int hang;
    	int lie;
    	int max;
    	max = a[0][0];  
    	for(i=0;i<3;i++){
    		for(j=0;j<4;j++){
    			if(max < a[i][j]){
    				max = a[i][j];
    				hang = i+1;
    				lie = j+1;
    			}
    		}
    	}
    	printf("最大值为:%d\n行号:%d\n列号:%d",max,hang,lie);
    	
    	return 0;
    }
    
  • 为什么要用函数:

    1. 避免代码冗长。
    2. 模块化设计思路。
    3. 按功能划分,每个函数代表一个功能,而函数的名字要体现函数的功能含义,类似变量标识符y=f(x)。
  • 函数要先定义再使用,和变量一个道理。

  • 函数三要素:

    1. 函数名:体现功能。
    2. 参数列表:比如z=f(x,y)中x,y就是参数,参数的个数根据需求定义。
    3. 返回值:比如y=f(x),y是函数根据x的值和f的功能执行后的结果。
  • 形式参数和实际参数

    1. 定义函数时,函数名后面的括号中的变量名是“形式参数”;调用函数时,函数名后面括号中的参数是“实际参数”,实际参数可以是常量、变量或表达式。
    2. 传递参数,传递的是值。即形参和实参的值相同,但是地址空间不同。
    3. 函数中定义的变量是局部变量,存在生命周期:被存放在栈空间,函数被调用的时候才为局部变量申请内存,函数调用结束内存空间被系统释放。

标签:tmp,12,形参,int,len,冒泡,printf,实参,array
From: https://blog.csdn.net/weixin_45650620/article/details/136881939

相关文章

  • Python基础----冒泡排序和二分查找(持续更新中)
    冒泡排序(共3个版本)在冒泡排序中,一共有3个版本,经常使用的是v3.0,v3.0版本的精彩之处就在于b=false和b=true只要把这点搞懂,那么冒泡排序就没什么难的!!!li=[5,4,7,8,2,1]#冒泡排序的v1.0版本forjinrange(len(li)-1):foriinrange(len(li)-1):......
  • java:形参和返回值
    一、抽象类名作为形参和返回值方法形参是抽象类名,其实需要的是该抽象类的子类对象方法的返回值是抽象类名,其实返回的是该抽象类的子类对象二、接口名称作为形参和返回值方法的形参是接口名,其实需要的是该接口的实现类对象方法返回值是接口名,其实返回的是该接口的实现类对象......
  • qsort函数[3]---冒泡排序与qsort函数的结合
    冒泡排序与qsort函数的结合首先给大家回顾一下冒泡排序voidbubble_sort(intarr[],intsz){ //确定趟数 inti=0; for(i=0;i<sz-1;i++) { //每趟进行两两互相比较 intj=0; for(j=0;j<sz-i-1;j++) { if(arr[j]<arr[j+1]) ......
  • C语言新手经典基础题——冒泡排序
    冒泡排序:用户输入一组数,编写程序将该组数据进行从小到大的顺序进行排列。举个例子:用户输入;1413918766这一组数据,现在要将这组数据进行从小到大的程序进行排列。我们编写程序的思路如下:现将第一个数和第二个数进行比较,即14和13,13比14小,那么就将13和14进行位置的调换,13......
  • C++函数模板的实参推断
    C++模板在使用类模板创建对象时,程序员需要显式的指明实参(也就是具体的类型)。例如对于下面的Point类:template<typename T1, typename T2> class Point;我们可以在栈上创建对象,也可以在堆上创建对象:Point<int, int> p1(10, 20);  //在栈上创建对象Point<char*, c......
  • 14_学习日志_数据结构_冒泡排序_快速排序_插入排序
    #include<编织有意义的谎言,使我相信闭上眼再睁开眼时的世界是同一个>1.介绍    从后往前或者从前往后开始两两比较元素,使得最小数上浮或者最大数下沉为冒泡排序,快速排序利用分治思想,使得基准数左边都存放相对较小数,右边存放较大数,两边再按照同样的做法重复。插入排序......
  • C语言冒泡排序
            冒泡排序是一种简单的排序算法,通过重复遍历要排序的数列,依次比较两个相邻的元素,如果它们的顺序错误则交换它们。这个过程会重复进行,直到没有相邻的元素需要交换,也就是数列已经排序完成。        冒泡排序的名字来源于其工作方式,因为较小的元素会像气......
  • 选择、冒泡、插入排序——左神数据结构算法Day1学习笔记
    时间复杂度:算法的常数操作数量级的数学表达式中,去除常数的最高阶项,比如aN²+bN+c的时间复杂度就是O(N²)。时间复杂度是数据量大到一定程度时,评价算法优劣的指标。当时间复杂度相同时,分析不同数据样本下的实际运行时间来比较算法的优劣。额外空间复杂度:在执行代码过程中申请的......
  • Vue中的事件冒泡和捕获
    Vue中的事件冒泡和捕获.stop阻止冒泡事件.capture设置捕获事件.self只有点击当前元素的时候,才会触发处理函数.once处理函数只被触发一次1.当一个父元素div1包裹着一个子元素div2同时有点击事件,我们点击子元素,不想触发父元素的事件,我们可以采用阻止事件冒泡解决@click.......
  • 冒泡排序时间复杂度分析
    冒泡排序(升序)时间复杂度分析原理:通过从前往后遍历两两对比,当前一个数大于后一个数,则交换位置,最大的数可以遍历到最右侧不断从后缩小数组范围(end--),当end到第一个元素时停止voidSwap(int*a,int*b){inttmp=*b;*b=*a;*a=tmp;}voidBubbleSort(int*arr,i......