一.定义和引用一维数组
1.定义一维数组的一般形式: 类型说明符 数组名[常量表达式];例:int arr[10];
注意:
(1)方括号中的常量表达式表示元素的个数,即数组的长度;
(2)数组的下标是从0开始的;
(3)常量表达式中可以包括常量和符号常量,不能包含变量。
2.引用一维数组元素 表示形式:数组名[下标]
(形式与定义数组用到的 数组名[常量表达式相同,但是含义不同])
二.一维数组的初始化
1.在定义数组时对全部数组元素赋予初值。例如:int a[5]={1,2,3,4,5};
2.只给数组中的一部分元素赋值。例如:int a[5]={1,2,3};
3.使一个数组中的元素全部为0,可写为int a[5]={0,0,0,0,0}; 或者int a[5]={0};
4.方括号内常量表达式的值可以省略,由数组内元素个数直接确定。
5.数组内元素个数不可以超过方括号内常量表达式的值。
三.程序实例
1.定义一个整形数组,查找数组中元素是否包含value=6.
//使用return跳出
#includeint main(){ int arr[]={4,3,6,8,9,0,2,1,7,6}; int value=6; for(int i=0;i //使用break跳出 需要对循环过程做标记
#includeint main(){ int arr[]={2,3,4,5,6,7,8,9,0,1}; int value=6; bool flag=false; for(int i=0;i //用函数封装
#includebool IsExitValue(int*arr,int value,int len){ for(int i=o;i 注:
(1)数组元素总个数求法:sizeof(arr)/sizeof(arr[0]) 前提是:sizeof必须和arr处于同一作用域 。
(2)arr只有与sizeof(arr)处于同一作用域时,arr代表整个数组的大小。否则arr代表数组首元素的地址。
2.给定数组{1,2,3}添加一个元素value 0,使数组变为{0,1,2,3}
#include#include void AddValue(int*arr,int value,int len,int index,int size){ assert(arr!NULL&&len>0&&index index;i--){ arr[i+1]=arr[i]; } arr[index]=value; } int main(){ int arr[10]={1,2,3}; int len=sizeof(arr)/sizeof(arr[0]); AddValue(arr,0,len,0,3); return 0; } //value:待删数据 len:数组总大小 index:待插下标 size:有效数据个数 注意断言
3.删除数组中的某一元素
int DeleteValue(int* arr, int value, int len) { int count = 0; for (int i = 0; i < len-count;) { //5min if (value == arr[i]) { count++; for (int j = i; j < len-1; j++) { //移动数据 arr[j] = arr[j + 1]; } } else { i++; } } return count; } int main(){ int arr[] = {1,2,2,4,3,2,2,5,2,2,2,2,2}; int value = 2; int len = sizeof(arr) / sizeof(arr[0]); int del_num = DeleteValue(arr, value, len); int size = len-del_num;// 有效数据个数 for (int i = 0; i < size; i++) { printf("%-5d",arr[i]); } return 0; }4.冒泡排序算法
算法运作:
(1)比较相邻的元素。如果第一个比第二个大,就交换他们两个
(2)对每一对相邻元素作同样的工作,从开始第一对到结尾最后一对。在这一点,最后的元素应该会是最大的数
(3)重复步骤,知道没有任何一组数字需要比较
void BubbleSort(int* arr, int len) { bool flag = false; for (int i = 0; i < len; i++) { for (int j = 0; j < len - 1 - i; j++) { if (arr[j] > arr[j + 1]) { int tmp = arr[j]; arr[j] = arr[j + 1]; arr[j + 1] = tmp; } } } } int main() { int arr[] = { 3,1,9,4,5,7,6,2,0 }; int len = sizeof(arr) / sizeof(arr[0]); BubbleSort(arr, len); for (int i = 0; i < len;i++) printf("%d", arr[i]); }
改进方法:
(1)设置一个标志位flag,判断程序是否排列完成。完成程序即可停止运行;
(2)快速排序:任选某一记录,比较其关键字与所有记录的关键字,并将关键字比它小的记录全部放在它的前面,将比它大的记录均存放在它的后面。这样,经过一次排序后,可将记录以该记录所在的分界点分为两部分,然后分别对这两部分进行快速排序,直至排序结束。



