第八章数组总结
一、数组的定义和初始化
数组基类型 数组名称 数组长度
1.[ ]中的数既数组的下标,下标的个数表示数组的维度
2.C语言中的数组下标都是从0开始的,这个数上的数组没有定义
3.在定义数组时不能使用变量定义数组的大小,可以在头部通过定义宏常量来定义不确定长度的数组。
4.二维数组的定义: 类型 数组名[第一维长度][第二维长度];(不能忽略第二维数组的长度)
二、数组的输入,赋值与输出
用循环语句将需要的值挨个输出输入赋值
三、排序
1.选择排序
第i次选择排序通过n-1次数组值的比较,从中选出最大或最小的一个放在第i个位置上,即第一次排序从所有数中挑出最大(小)的数放在第一个的位置上,第二次从第二个到最后一个中跳出来……以此类推
#include<iostream>
#define N 100
int a[N];
int main()
{
int k,n,t;
for(int i=0;i<n-1;i++)
{
k=i;
for(int j=k+1;j<n;j++)
{
if(a[j]<a[k]) k=j;/*选择的过程*/
if(i!=k)
{
t=a[i];
a[i]=a[k];
a[k]=t;
}/*交换的过程*/
}
}
}
2.冒泡排序
通过相邻两个数之间的比较交换使较小或较大的数冒泡上升或沉底
#include<iostream>
#define N 100
int a[N];
using namespace std;
int main()
{
int n,t;
cin>>n;
for(int i=0;i<n;i++) cin>>a[i];
for(int i=0;i<n-1;i++)
for(int j=0;j<n-1-j;j++)
{
if(a[i]>a[i+1])
{
t=a[i];
a[i]=a[i+1];
a[i+1]=t;
}
}
}
3.插入排序
两个数比较交换,通过第三个的比较插入排序
#include<iostream>
#define N 100
int a[N];
using namespace std;
int main()
{
int num,temp,l;
for(int i=1;i<num;i++)
{
l= i-1;temp=a[i];
while(l>=0&&a[l]>temp)
{
a[l+1]=a[l];
l--;
}
a[l+1]=temp;
}
}
4.排序函数
#include sort(数组开始,数组结束) sort(a,a+n)
四、二分查找
思想:将数组分开,通过与中间值得比较,每次将查找范围缩小一半,大大缩小了时间
先排序,后查找
#include<iostream>
#define N 100
int a[N];
using namespace std;
int main()
{
int n,low,high,mid,temp;
low=0,high=n-1,mid=0;
while(low<=high)
{
mid=(low+high)/2;
if(a[mid]>temp)
high=mid-1;
else if(a[mid]<temp)
low=mid+1;
else
cout<<a[mid]<<endl;
}
cout<<"Not Found!"<<endl;
}
一点点字符串数组
因为字符串数组还没有学太多所以只写一点点会的。
头文件include
计算字符数量的函数strlen()
输入
printf 只能输入空格前的
gets()可以输入空格
在最近的学习和做题过程中,确确实实的感受到了一定的难度,很多题目看上去简单,但是真正做了之后才发现,却很难达到题目要求。还有很多题目,虽然做出来了,却很麻烦,甚至有的题目会超时。还是那个问题,在以后学习的过程中,还是要注意思路,集思广益,注意积累。争取能够写出更简单,更符合要求的程序。