C语言:数组基本知识&&冒泡排序

数组是一组相同类型元素的集合
创建数组:类型 + 数组名 + [数组的大小];[ ]里面只能放字面常量,或宏定义的常规的常量
初始化数组:(在创建数组的同时给数组的内容一些合理初始值)
数组赋值:不能被整体赋值,可以通过循环的方式赋值;
数组是使用下标来访问
具体如下例子:

int main()
{
 int arr[5];//定义一个数组,如果没有初始化,则产生的是随机值
 
 int a[] = { 0, 1, 2, 3, 4 };//有元素个数可以不写数组的大小,编译器会自动分配数组的大小
 
 char b[] = { 'a', 'b', 'c', 'd' };//元素个数为4
 char b1[] = "abcd";//元素个数为5,字符串以'\0'结尾,所以默认把'\0'作为数组的内容
 int num = sizeof(arr1) / sizeof(arr1[0]);//求数组元素个数
 
 int arr1[5] = { 1, 2, 3 };//5个元素,赋了三个值,后面的默认为0
 arr1[0] = 0;//可以这样一个个赋值
 int j = 0;
 for (; j < 5; j++)//循环赋值
 {
  arr1[j] = j;//
 }
 int i = 0;
 for (; i < num; i++)//打印数组(循环)
 {
  printf("%d ",arr1[i]);//0 1 2 3 4
 }
 
 printf("\n");
 system("pause");
 return 0;
}

二维数组

二维数组的本质也是一位数组,只是这个一维数组里的每个元素也是一个数组
比如:
char a[ ][4] = { { 1, 2, 3, 4 }, { 3, 4, 5, 6 }, { 5, 6, 7, 8 } };//第一个[ ]可以不写,编译器自动分配大小
可以看作1个一维数组里有三个数组(元素),每个数组里有4个元素;

打印(遍历)二维数组:

int main()
{
 int a[3][4] = { { 1, 2, 3, 4 }, { 3, 4, 5, 6 }, { 5, 6, 7, 8 } };
 int i = 0;
 //用双循环遍历
 for (; i < 3; i++)
 {
  int j = 0;
  for (; j < 4; j++)
  {
   printf("%d", a[i][j]);
  }
  printf("\n");
 }
 //用一层循环打印 指针
 int m = 0;
 int *p = &a[0][0];
 for (; m < 3 * 4; m++)
 {
  printf("%d ", *p);
  p++;
 }
system("pause");
 return 0;
}

冒泡排序:
思想:从头部开始。进行两两比较,根据大小交换位置,直到最后将大的(或小的)元素交换到了队尾,从而成为有序序列的一部分
我排序的是从小到大的:(从前往后两两比较,前大后小就交换,否则继续看后面的)
在这里插入图片描述
代码如下:

#include<stdio.h>
#include<windows.h>
#pragma warning(disable:4996)

void bubble_sort(int *parr,int sz)
{
 int max = parr[0];
 int temp = 0;
 int i = 0;
 for (; i < sz - 1; i++)//要多少次
 {
   int j = 0;
   for (; j < sz-1-i; j++)//从头到尾一次的结果
   {
    if (parr[j]>parr[j+1])
    {
     temp = parr[j];
     parr[j]=parr[j+1];
     parr[j+1] = temp;
    }
   }
 }
 //打印数组
 for (i = 0; i < sz; i++)
 {
  printf("%d", parr[i]);
 }
 printf("\n");
}

int main()
{
 int arr[] = { 1, 5, 3, 6, 7, 8, 0, 2 };
 int sz = sizeof(arr) / sizeof(arr[0]);
 bubble_sort(arr,sz);
 system("pause");
 return 0;
}
发布了73 篇原创文章 · 获赞 2 · 访问量 2877

猜你喜欢

转载自blog.csdn.net/weixin_43219708/article/details/103044871