这只是本人学习C++笔记,请不要用来参考,若有问题,欢迎提出
数据元素插入
在数组中插入数据时,要将最后一个元素逐个向后移动,直到插入位置,然后将要插入的数据插入数组
示例:
void charuyuansu(int x,int k,int *a,int n){
/*x为插入数据,
k为插入位置,
a为插入数组,
n为数组长度,
所有数据都以0为开始
*/
for(int i=n;i>k;i--) a[i+1]=a[i];
a[k]=x;
}
数组元素删除
当删除数组中一个元素时,要把从删除位置之后的所有元素向前移动一个位置
示例:
void shanchuyuanzu(int k,int n,int *a){
/*
k为删除元素的位置,
n为数组长度,
a为数组
所有数据都以0开始
*/
for(int i=k;i<n;i++) a[i]=a[i+1];
}
无序查找
简单的遍历所有元素,一个一个校对,效率极低
示例:
void wuxuchazhao(int *a,int n,int key){
/*
a为数组,
n为数组长度,
key为关键字,
所有数据都以0开始
*/
for(int i=0;i<n;i++){//遍历整个数组
if(a[i]==key) cout<<i<<" find\n";//如果找到,输出位置 find
}
}
折半查找
前提:数组有序;效率较高
示例:
void zhebanchazhao(int *a,int L,int R,int key){
/*
a为数组,
L为起始位置,
R为终止位置,
key为关键字
所有数据都以0开始
*/
int mid;//得到中间数据的位置
while(L<=R){
mid=(L+R)/2;//得到中间数据的位置
if(key==a[mid]) break;//如果找到,跳出循环
if(key<a[mid]) R=mid-1;//如果关键字比比较数据小,将R移到现在位置的左边
else if(key>a[mid]) L=mid+1;//如果关键字比比较数据大,将R移到现在位置的右边
}
if(L<=R)//如果L没有超过R,即在正常结束循环前跳出循环
cout<<mid;//输出这个位置
else//否则
cout<<"没找到";//输出没找到
}
以上程序大概是没有问题的(只是函数的参数设置的有点乱。。。还要再改一下)