首页 > 其他分享 >墨烯的C语言技术栈-C语言基础-012

墨烯的C语言技术栈-C语言基础-012

时间:2024-07-15 23:55:27浏览次数:16  
标签:arr int 元素 len C语言 012 墨烯 数组 printf

数组
要存储1-100的数字,怎么存储?
C语言中给数组的定义:一组相同类型元素的集合

数组定义
int arr[10] = {1,2,3,4,5,6,7,8,9,10}; // 定义一个整型数组,最多放10个元素

int main()
{
  // 0-9都是整数
  int arr[10] = {10,11,12,13,14,15,16,17,18,19};// arr是数组名  [10]是申请内存空间 序号从0开始也就对应10的位置上 []不写就会按后面存多少数给内存
  printf("%d\n",arr[8]);
  int i = 0;
  while(i < 10)
  {
    printf("%d\n",arr[i]);
    i++;
  }
  也可以使用for循环
  for(i=0;i<10;i++)
  {
    printf("%d\n",arr[i]);
  }
  return 0;
}

数组的下标
C语言规定:数组的每个元素都有一个下标,下标从0开始的
数组可以通过下标来访问的

如arr[8] = 18;

单个访问是用下标来访问的

多个访问是用循环或者其他结构结合来访问的
如后面刷算法使用的中最简单的冒泡排序
这里初步说明一下 以后考试和面试会用到
冒泡排序是相邻元素的比较和互换大的放后面 小的放前面
#include <stdio.h>

void mp(int arr[],int len)  // 设置数组arr[] 和 整型变量len
{
  int i,j,temp;    // 设置整型变量 i, j, temp
  for(i = 0; i < len - 1; i++) // 
i初始值设置为0 len为为数组长度 i自增(每次循环后i+1) 
len-1的原因是每一轮比较会把较大的数排在最后 
然后下一轮就不考虑最后一个数
这一个过程嘛 简单来说就是 一个外循环 而且每一轮外循环都对数组每一个元素进行至少一次比较.
这是因为每一轮外层循环后 最大的元素会被列到数组末尾
就比如 1  4 3 6 8 7 
一次外循环就变成 1 4 3 6 7 (8) 
所以每一次会把末尾的减去也就是len -1的原因 用来来控制轮次
  {
    for(j = 0; j < len - 1 - i; j++) // 
j初始值设置为0 
j为什么要 < len-1-i呢 -i是每轮已确定最大值元素的个数 -1避免数组越界(越界就是超过内存空间)
这个是优化方向的考虑 在外循环中已经确定了最大元素被移动到数组的末尾,
因此内循环不需要对已经确定位置的元素进行比较(也就是末尾的) 只需要相邻两数进行比较 也就是控制比较的元素边界
如 1 4 3 6 7 中
 1 4进行比较 4 3进行比较 3 6进行比较 6 7 进行比较
 然后会变成 1 3 4 6 7 因为这是比较简单一串数组所以一次性就排好了 
一次性排不好就会是
  如1 7 6 5 0 这样
  1 7 比较 7 6 比较 6 5比较 5 0比较
  变成 1 7 6 5 0 然后 1 6 7 5 0 然后 1 5 6 7 0 然后 
0 1 5 6 7
这就是两两元素进行比较 至少一次比较
这两个嘛没啥好说的 也就是 外循环控制循环轮次排出最后一个最大数 内循环就是两两相邻元素进行比较 也就这样
    {
      if(arr[j] > arr[j+1]) // 这个就是冒泡的核心思想了 通过不断比较相邻的两个元素 以将较大的元素逐渐移到数组的末尾 然后排序
      {
        temp = arr[j];  // 将arr[j]数存入 temp
        arr[j] = arr[j + 1]; // 这种情况是arr[j] >arr[j+1]的时候 所以将arr[j]的数换位到arr[j+1] 也就是后一位
        arr[j + 1] = temp;// 然后将temp存入原来后一位
 简单来说就是 6 3这种情况 把6存入temp 然后 6那个位置存入了arr[j + 1]也就是3这个数 再把temp = 6这个数放在arr[j + 1]这个位置 
如果这样还不能理解的话 就更简单的来说
军训排队你180cm站在 你朋友175cm前面 然后教官说高的站在后面 然后你站在一边等你朋友向前去 然后你站到你朋友原来的位置上 就是这样
      }
    }
  }
}

void mpxh(int arr[],int len)
{
  int i;
  for(i = 0; i < len; i++)
  {
    printf("%d\t",arr[i]);
   }
  printf("\n");
//  这个没啥好说的 就是一个循环编历方法 然后下面换行
}

int main()
{
  int arr[] = {53, 14, 17, 8, 2, 88, 23};
  int len = (int) sizeof(arr) / szieof(*arr);
  
  printf("初始数列:");
  mpxh(arr,len);
  
  printf("开始对其冒泡排序...");
  mp(arr,len);
  
  printf("排序完成:");
  mpxh(arr,len);
  
  return 0;
// 这样的结果就是输出最后一个结果为
排序完成:2 8 14 17 23 53 88

冒泡排序
优点:
简单易懂 最基础的排序方法嘛
稳定排序 它们在排序后的相对顺序不会改变
空间复杂度低 只需要使用固定的额外空间来交换元素 空间复杂度为O(1)

缺点
时间复杂度高 就一个嵌套循环让时间复杂度直接增加到O(n的平方) (这里没有学过时间复杂度的可以理解为指数性的增加)
不适于大数据的集 高的时间复杂度让它在处理大数据上消耗大量的计算资源和时间
排序效果依赖初始顺序 如果初始顺序接近有序,排序的效率可能会提高;但如果初始数组完全无序,排序的效率会相对较低。
}
 

标签:arr,int,元素,len,C语言,012,墨烯,数组,printf
From: https://blog.csdn.net/zfcx7/article/details/140364916

相关文章

  • 【C语言】位操作符详解 - 《开心消消乐》
    目录1.介绍2.位操作符列表3.按位操作符详解3.1按位与(&)示例输出3.2按位或(|)示例输出3.3按位异或(^)示例输出3.4按位取反(~)示例输出按位取反操作符(~)示例输出按位取反操作符详细解释3.5左移(<<)示例输出3.6右移(>>)示例输出4.应用实例4.1使用位掩码示例输出4.2......
  • C语言数据结构初阶排序(上篇)
    排序的概念排序:所谓排序,就是使一串记录,按照其中的某个或某些关键字的大小,递增或递减的排列起来的操作。稳定性:假定在待排序的记录序列中,存在多个具有相同的关键字的记录,若经过排序,这些记录的相对次序保持不变,即在原序列中,r[i]=r[j],且r[i]在r[j]之前,而在排序后的序列中,r[i]仍......
  • 【C语言】指针由浅入深全方位详解
    目录指针定义指针类型野指针指针运算 指针与数组的联系二级指针 指针数组 字符指针 数组指针 数组参数,指针参数 函数指针 函数指针数组回调函数 练习题 代码仓库 指针定义1.指针是内存中一个最小单元的编号,也就是地址。2.平时口语中说的指针,......
  • AI预测福彩3D采取888=3策略+和值012路或胆码测试7月15日新模型预测第33弹
        周末去外地出差,断更了两天,今天开始恢复每日一发~        今天咱们继续验证新模型的8码定位=3,重点是预测8码定位=3+和值012+胆码。有些朋友看到我最近几篇文章没有给大家提供缩水后的预测详情,在这里解释下:其实我每篇文章中既有8码定位,也有和值012路,也有胆码......
  • 小白初识之C语言二
    重构:不增加代码功能,对代码结构的调整和优化,为了维护和拓展1.流程控制-顺序结构-分支结构(判断\选择)-循环结构2.分支-if-ifelse(三元运算替代)-ifelseifelseifelse(多路分支)-switch-case多路分支,有限,简洁3. 数组-一个标识符,存储多个值(大小是......
  • C语言<<左移运算符
    在C语言中,<<是位左移运算符(BitwiseLeftShiftOperator)。这个运算符用于将一个数的各二进制位全部左移若干位,由运算符右侧的数指定移动的位数,左侧操作数的位将向左移动,移动的位数由右侧操作数决定。移动过程中,左侧操作数左侧超出位数的部分将被丢弃,而在右侧增加的部分将用......
  • C语言指针
    指针引用与指针引用&指针*必须初始化可以不初始化不能为空可以为空不能更换目标可以更换目标初始化案例int&r;//不合法,没有初始化引用int*p;//合法,但p为野指针,使用需要小心(1)是否需要初始化由于引用不能为空,所以我们在使用引用的时候......
  • C语言的编译和链接
    翻译环境和运⾏环境在ANSIC的任何⼀种实现中,存在两个不同的环境。第1种是翻译环境,在这个环境中源代码被转换为可执⾏的机器指令。第2种是执⾏环境,它⽤于实际执⾏代码。翻译环境那翻译环境是怎么将源代码转换为可执⾏的机器指令的呢?这⾥我们就得展开开讲解⼀下......
  • C语言中关键字static
    前言    在C语言中,static 是一个关键字,它可以用在不同的上下文中,赋予变量或函数不同的意义。static 关键字主要用于控制变量的存储期和可见性,以及函数的链接性。下面是 static 关键字的主要作用原理与用途:局部静态变量    当 static 修饰局部变量时(即......
  • 【C语言】 全面解析占位符
    文章目录什么是占位符?常见的占位符及其用法占位符的宽度和精度常见错误和注意事项占位符的高级用法占位符在实际编程中的应用结论在C语言编程中,占位符是一种常用的编程工具,通常用于表示即将填入的某个值。占位符不仅在格式化输出中非常有用,而且在调试和开发过程......