1.这个关键在实际开发中挺经常使用的。当咱们使用实例成员变量很差处理时,咱们将声明为静态变量,所以它有如下特性。算法
参考答案:数组
static
变量的做用范围为该函数体,不一样于auto
变量,该变量的内存只被分配一次,所以其值在下次调用时仍维持上次的值static
全局变量能够被模块内所用函数访问,但不能被模块外其它函数访问static
函数只可被这一模块内的其它函数调用,这个函数的使用范围被限制在声明它的模块内static
成员变量属于整个类所拥有,对类的全部对象只有一份拷贝static
成员函数属于整个类所拥有,这个函数不接收this
指针,于是只能访问类的static
成员变量。当年在大学时期,我对这几个变量也是常常搞混的。函数
1
2
3
4
5
6
|
const char *p;
char const *p;
char * const p;
const char * const p;
|
参考答案:大数据
const char *p
定义了一个指向不可变的字符串的字符指针,能够这么看:const char *
为类型,p
是变量。char const *p
与上一个是同样的。char * const p
定义了一个指向字符串的指针,该指针值不可改变,即不可改变指向。这么看:char *
是类型,const
是修饰变量p
,也就是说p
是一个常量const char * const p
定义了一个指向不可变的字符串的字符指针,且该指针也不可改变指向。这一个就很容易看出来了。两个const
分别修饰,所以都是不可变的。3.算法排序this
冒泡排序、插入排序。在开发中最经常使用的就是冒泡排序和插入排序了,不用说那么多高深算法,在日常的工做中,若非BAT,也没有这么严格要求什么多高的效率。能掌握这两种最经常使用的就基本能够了,搞App
开发,若非大数据,并无什么过高的要求。spa
冒泡排序: 双重循环就能够实现,在工做中常应用于模型排序。指针
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
|
void bubbleSort(int[] unsorted)
{
for (int i = 0; i < unsorted.Length; i++)
{
for (int j = i; j < unsorted.Length; j++)
{
if (unsorted[i] > unsorted[j]) {
int temp = unsorted[i];
unsorted[i] = unsorted[j];
unsorted[j] = temp;
}
}
}
}
|
插入排序:code
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
|
void insertionSort(int[] unsorted)
{
for (int i = 1; i < unsorted.Length; i++)
{
if (unsorted[i - 1] > unsorted[i])
{
int temp = unsorted[i];
int j = i;
while (j > 0 && unsorted[j - 1] > temp)
{
unsorted[j] = unsorted[j - 1];
j--;
}
unsorted[j] = temp;
}
}
}
|
下面也是插入排序算法,这种写法可能会更好看一些。上面用while
循环来查找和移动位置,很差看明白。对象
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
|
void insertSort(int *a,int n)
{
int i,j,key;
// 控制须要插入的元素
for (i = 1; i < n; i++)
{
// key为要插入的元素
key = a[i];
// 查找要插入的位置,循环结束,则找到插入位置
for (j = i; j > 0 && a[j-1] > key; j--)
{
// 移动元素的位置,供要插入元素使用
a[j] = a[j-1];
}
// 插入须要插入的元素
a[j] = key;
}
}
|
选择排序排序
假定存在数组 array[0..n-1], 选择排序的核心思想是:
第 i 趟排序是从后面的 n - i + 1(i = 1,2,3,4,. . .,n - 1)个元素中选择一个值最小的元素与该 n - i + 1 个元素的最前门的那个元素交换位置,即与整个序列的第 i 个元素交换位置。如此下去,直到 i = n - 1,排序结束。
也可描述为:
每一趟排序从序列中未排好序的那些元素中选择一个值最小的元素,而后将其与这些未排好序的元素的第一个元素交换位置。
特色:
1. 算法完成须要 n - 1 趟排序,按照算法的描述,n - 1 趟排序以后数组中的前 n - 1 个元素已经处于相应的位置,第 n 个元素也处于相应的位置上。
2. 第 i 趟排序,实际上就是须要将数组中第 i 个元素放置到数组的合适位置,这里须要一个临时变量 j 来遍历序列中未排好序的那些元素,另外一临时变量 d 来记录未排好序的那些元素中值最小的元素的下标值,
3. 一趟遍历开始时,令 d = i,假定未排序序列的第一个元素就是最小的元素,遍历完成后,变量 d 所对应的值就是值最小的元素,判断 d 是不是未排序序列的第一个元素,若是是,则不须要交换元素,若是不是,则须要交换array[d] 和 array[i]。
4. 此方法是不稳定排序算法,可对数组{a1 = 49,a2 = 38, a3 = 65, a4 = 49, a5 = 12, a6 = 42} 排序就能够看出,排序完成后 a1 和 a4的相对位置改变了。
5. 此方法移动元素的次数比较少,可是无论序列中元素初始排列状态如何,第 i 趟排序都须要进行 n - i 次元素之间的比较,所以总的比较次数为
1 + 2 + 3 + 4 +5 + . . . + n - 1 = n(n-1)/2, 时间复杂度是 O(n^2).
void selectSort(int array[], int n)