数组运算例子
判断素数
构造素数表
欲构造n以内的素数表
1.令x为2
2.将2x,3x,4x直至ax<n的数标记为非素数
3.令x为下一个没有被标记为非素数的数,重复2;
直到所有的数都已经尝试完毕
构造素数表
欲构造n以内(不含n)的素数表
1.开辟prime[n],初始化其所有元素为1,prime[x]为1表示x为素数
2.令x=2
3.如果x是素数,则对于(i=2;x*i<n;i++)令prime[i*x]=0
4.令x++,如果x<n,重复3,否则结束
#include <stdio.h>
int main(){ //从小到大构造一个素数表
int maxNumber;
scanf("%d",&maxNumber); //求maxNumber以内的素数
int isPrime[maxNumber];
int i;
int x;
for (i=0;i<maxNumber;i++){ //先令isPrime里面的数据全为1
isPrime[i]=1;
}
for (x=2;x<maxNumber;x++){ //从2开始逐1来构建isPrime
if (isPrime[x]){ //如果是素数的 继续。。。
for (i=2;i*x<maxNumber;i++){ //将对i倍数的x都标记为0 即都标记为非素数
isPrime[i*x]=0;
}
}
}
for (i=2; i<maxNumber;i++){ //最后再遍历isPrime是1的数据
if(isPrime[i]){
printf("%d\t",i);
}
}
printf("\n");
}
/*
算法不一定和人的思考方式相同
*/
####################
搜索
在一个数组中找到某一个数的位置(或确认是否存在)
基本方法: 遍历
#include <stdio.h>
int search(int key,int a[],int len);
int main(){
int a[]={3,25,45,78,65,21,47,52,12,};
int r=search(12,a,sizeof(a)/sizeof(a[0]));
printf("%d\n",r);
return 0;
}
int search(int key,int a[],int len){
int ret =-1; //当没找到 就还是-1
for (int i=0;i<len;i++){
if (key==a[i]){
ret =i;
break;
}
}
return ret;
}
' 数据结构——散列表 hash table
二分法!!!——需要数据有序
*对大量数据进行搜索的时候,二分法效率高
搜索次数
###################################
排序
选择排序
#include <stdio.h> //选择排序
int max(int a[],int len){ //找最大值的位置
int maxid=0;
for(int i=1;i<len;i++){
if(a[i]>a[maxid]){
maxid=i;
}
}
return maxid;
}
int main(){
int a[]={2,45,4,90,14,365,54,65,11,};
int len=sizeof(a)/sizeof(a[0]);
for (int i=len-1;i>0;i--){
int maxid=max(a,i+1);
int t=a[maxid];
a[maxid]=a[i];
a[i]=t;
}
for( int i=0;i<len;i++){
printf("%d\t",a[i]);
}
}
#######################################################