- 数组的定义和初始化
- 查找
- 1.顺序查找
- 2.二分查找
- 排序方法
- 1.(简单)选择排序法
- 2.冒泡排序法
- 3.(直接)插入排序法
数组在定义是要注意:
1.数组同变量一样,需要先定义后才能使用
2.定义数组时,[ ]内不能用变量表示元素个数(在引用时可以,如for内初始化数组),也不能用实数表示元素个数
一维数组初始化要注意,{ }只能在数组定义的同时使用。数组不初始化,里面的数据将会是随机数
正确示范:
int a[5]; a[0]=0; a[1]=1; a[2]=2; a[3]=3; a[4]=4;
int a[5]={0, 1, 2, 3, 4};
int a[]={0, 1, 2, 3, 4};
int a[5]={};
int a[5]={0};
错误示范:
int a[5]=[0, 1, 2, 3, 4];
int a[5]={0, 1, 2, 3, 4};
int a[5];
a={0, 1, 2, 3, 4};
int a[5]=1;
int a[5]={1};
查找数组a有没有值为25的元素
#includemain() { int a[10]={1, 0, 24, 30, 5, 9, 30, 25, 55, 49}; int i, j; for(i=0; i<10; i++) if(a[i]==25) break; if(i>9) printf("没找到25"); else printf("25的下标为%d", i); return 0; }
二分查找又称对分查找、折半查找。要使用二分查找有一个前提:数组中的数据必须由大到小或者小到大的有序顺序排列。
#include#include int main() { int array[]={0, 1, 3, 6, 9, 14, 18, 22, 23, 24, 25, 28, 30, 33, 38, 44, 50}; int low=0,high=sizeof(array)/sizeof(array[0]); int mid=0; int target=25; while(low<=high) { mid=(low+high)/2; if(array[mid] target) high=mid-1; else break; } if(low>high) printf("没找到25"); else printf("找到了,下标是%d", mid); return 0; }
找到元素最小值/最大值,把它放在数组头,接着找剩下元素里的最值,把它放在上次找到的最值后面,直到最后一个元素。
方法一:始终保持a[i]是一个更小值,直到它为剩下元素里值最小
#include#include #include int main() { int a[100]={}; int i, j, t; int n=sizeof(a)/sizeof(a[0]); srand(time(NULL)); for(i=0; i
方法二:找到最小值的下标,然后和a[i]交换,使最小值位于前头#include#include #include int main() { int a[100]={}; int i, j, k, t; int n=sizeof(a)/sizeof(a[0]); srand(time(NULL)); for(i=0; i 2.冒泡排序法
冒泡排序,顾名思义,元素会像水里的泡泡一样,从底部一直上升到顶部,即前后元素相比较,大值元素被安排到数组尾部,小值元素在交换的时候自然而然的会排在头部。
#include#include #include int main() { int a[100]={}; int i, j, t; int n=sizeof(a)/sizeof(a[0]); srand(time(NULL)); for(i=0; i 3.(直接)插入排序法
跟打扑克牌时差不多,把选中元素插入到有序序列合适的位置中。
#include#include #include int main() { int a[100]={}; int i, j, k, data; int n=sizeof(a)/sizeof(a[0]); srand(time(NULL)); for(i=0; i data) break; k=j; for(j=i; j>k; j--) a[j]=a[j-1]; a[k]=data; } for(i=0; i



