数据结构的使用循环时的比较次数

img


上面那个不是循环了n次吗,下面那个不是n-1次吗?😂为啥都比我理解的多一次呀

这个代码稀巴烂啊,根本就是错的
第一个循环结束后,a[0]已经是足底啊只了
可第二个循环的max2初始值却是a[0],后面怎么可能还有比它大的呢?应该是max2=a[1]啊
而且,循环怎么能到i<=n呢?n个整数的最大下标是n-1啊。
所以这两处都写错了,改过来以后才是循环n-1和n-2次

  • 这个问题的回答你可以参考下: https://ask.csdn.net/questions/7646215
  • 这篇博客也不错, 你可以看下C语言 编写程序,完成:从键盘上输入一个n*n数组各元素,把每行元素循环左移1位输出。
  • 除此之外, 这篇博客: 排序和查找中的 问题升级,用键盘输入n个数,使用冒泡排序法将其排成一个从小到大的有序数列。 部分也许能够解决你的问题, 你可以仔细阅读以下内容或跳转源博客中阅读:
  • #include<stdio.h>
    
    //冒泡排序的函数
    void bubbleSort(int arr[],int n){
    	//用 for 循环,循环比较排序
    	int i,j;
    	int temp;//临时变量
    	for(i=0;i<n-1;i++){
    		for(j=0;j<n-i-1;j++){
    			//如果前面的一个数较大就交换
    			if(arr[j]>arr[j+1]){
    				temp=arr[j];
    				arr[j]=arr[j+1];
    				arr[j+1]=temp;
    			} 
    		}
    	} 
    }
    void main(){
    	printf("请输入数组的元素个数:");
    	int n;
    	scanf("%d",&n);
    	printf("请输入数组的%d个元素:",n);
    	int arr[n];
    	int i;
    	for(i=0;i<=n;i++){//循环输入
    	    if(i<n){
                scanf("%d",&arr[i]);
            }
            else{//输入第n个数结束循环
            	break;
    		}  
        }
    	bubbleSort(arr,n);//默认是地址传递 
    	printf("\n排序后:\n"); 
    	int j;
    	for(j=0;j<n;j++){
    		printf(" %d",arr[j]);
    	} 
    } 
    

    在这里插入图片描述