目录
一.一维数组的初始化
在定义数组的同时,给各数组元素赋值
int a[10]={0,1,2,3,4,5,6,7,8,9};
int a[10]={0,1,2,3,4};相当于
int a[10]={0,1,2,3,4,0,0,0,0,0};
int a[10]={0,0,0,0,0,0,0,0,0,0};相当于
int a[10]={0};
int a[5]={1,2,3,4,5};可写为
int a[ ]={1,2,3,4,5};
如果是存放字符串,比如char codes[] = "sample",那么在字符串末尾会有一个\0,因此该数组长度是7.
如果调用函数直接写一个数组的数组名,那么数组名对应该数组首变量的地址。
二.数组的排序
首先数组的排序分为冒泡排序,选择排序和插入排序
①冒泡排序:
数组排序(冒泡排序)
升序排序算法设计思路
1、每一趟过程通过两两比较和交换将最大的元素冒泡到最后(下标为0的元素最靠前);
2、需要(N-1)趟过程完成数组排序(N是元素个数)。
要写冒泡排序其实有很多种方法,下面举两个例子。
代码:
cpp
int main()
{
int t;
int arr[8] = { 3,2,7,5,8,6,1,9 };
int i = 0;
again:
for(i=0;i<=6;i++)
if (arr[i] > arr[i + 1])
{
t = arr[i];
arr[i] = arr[i + 1];
arr[i + 1] = t;
}
for (i = 0; i <= 6; i++)
if (arr[i] > arr[i + 1])
goto again;
for (i = 0; i <= 7; i++)
{
printf("%d", arr[i]);
}
return 0;
}
首先第一个for 循环对数组中每两个元素进行比较交换,但是存在一个问题:这只能实现每相邻两个数大小比较交换,而不能实现不相邻的比较交换,因此我们再用一个for循环验证是否全部升序排列,如果不符合,那么再次回到第一个for循环,回到结束为止。
没有第二个for循环运行结果如下:
正确的运行结果如下:
②选择排序
数组排序(选择排序)
降序排序算法设计思路
从a[0]~a[size-1]这段元素中找最大元素a[max],a[0]和a[max]交换;接着,从a[1]~a[size-1]这段元素中找最大元素a[max],a[1]和a[max]交换;依次类推,直到第N-1个元素为止。
代码如下:
cpp
int main()
{
int max = 0;
int m=0;
int arr[8] = { 3,5,1,6,8,9,3,4 };
int i=0;
int I=0;
int t;
while (I<=7)
{
for (; i <= 7; i++)
{
if (arr[i] > arr[max])
{
t = arr[max];
arr[max] = arr[i];
arr[i] = t;
}
}
max++;
I++;
i = I;
}
for (i = 0; i <= 7; i++)
{
printf("%d", arr[i]);
}
return 0;
}
运行结果如图:
关于数组的查找,我们在之前二分法查找中已经介绍过,读者可以寻找之前的博客进行学习。
往期回顾:
C语言编程练习:验证哥德巴赫猜想 进制转换 rand函数-CSDN博客
"山林不向四季起誓,荣枯随缘"------C语言(爱心+祝福语)代码分享_爱心代码朋友圈文案-CSDN博客
C语言------二分法查找讲解_c语言二分法查找一个数-CSDN博客
C语言穷举法算法经典题型(二)_编写程序,输入x,输出y y= x2+3x-4 (x≤5) =x2-5x+7 (x>5) 输入 一个-CSDN博客