C++课堂笔记七

C++课堂笔记七

全局变量、局部变量、静态变量

定义在函数内部的变量叫局部变量(函数的形参也是局部变量)

定义在所有函数的外面的变量叫全局变量

全局变量在所有函数中均可使用,局部变量只能在定义它的函数内部使用

全局变量都是静态变量。 局部变量定义时如果前面加“static” 关键字,则该变量也成为静态变量

静态变量的存放地址,在整个程序运行期间,都是固定不变的

非静态变量(一定是局部变量)地址每次函数调用是都可能不同,在函数的一次执行期间不变

如果没有明确初始化,则静态变量会被自动初始化成全0(每个bit都是0),局部非静态变量的值则随机

静态变量:

1
2
3
4
5
6
7
8
9
10
11
void Func()
{
static int n = 4; //静态变量只初始化一次
cout<<n<<endl;
++n;
}
int main()
{
Func(); Func(); Func();
}
// 输出: 4 5 6

strtok的实现:

1
2
3
4
5
6
7
8
9
10
11
12
int main()
{
char str[] = "- This, a sample string, OK."; // 下面要从str逐个抽取出被" ,.-" 这几个字符分隔的字串
char *p = strtok (str," ,.-"); //只要p不为NULL,就说明找到了一个字串
while (p != NULL)
{
cout<<p<<endl;
p = strtok(NULL, " ,.-"); //后续调用,第一个参数必须是NULL
}

return 0;
}

变量的生存期


选择和插入排序

1
2
3
4
5
6
7
8
9
10
11
12
13
Void SelectionSort(int a[] ,int size)
{
for(int i = 0; i< size - 1; ++i){ //每次循环后将第i小的元素放好
int tmpMin = i; //用来记录从第i个到第size-1个元素中,最小的那个元素的下标
for(int j = i+1; j<size; ++j){
if(a[j]<a[tmpMin])
tmpMin = j;
} //下面将第i小的元素放在第i个位子上,并将原来占着第i个位子的元素挪到后面
int tmp = a[i];
a[i] = a[tmpMin];
a[tmpMin] = tmp;
}
}


算法和程序的时间复杂度

一个程序或算法的时间效率,也称“时间复杂度”

复杂度常用大写字母O和小写字母n来表示,比如O(n), O(n2)等。n代表问题的规模

时间复杂度是用算法运行过程中,某种时间固定的操作需要被执行的次数和n的关系来度量的。在无序数列中查找某个数,复杂度是O(n)

计算复杂度的时候,只统计执行次数最多的(n足够大时)那种固定操作的次数。如某个算法需要执行加法n2次,除法n次,那么就记其复杂度是O(n2)的

复杂度有平均复杂,度个最坏复杂度,可以一致,可以不一致。

常数复杂度:时间(操作次数)和问题的规模无关