算法作用:将一个无序的数组a 按照非降序排序!

算法思想:将a[1] 和 a[0]比较大小,如果比a[0]小,把a[0] 后移一位,插入a[1],然后将a[2]依次和a[1] a[0]比较大小,当比a[2] 小的时候一直后移,然后插入a[2]。 依次循环知道所有元素排序完成!

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
#include<stdio.h>
#include<malloc.h>
void insertionsort(int *a, int N){
int i = 1;
int j,x;
while (i<N){
int j = i;
x = a[i];
while ((j>0)&&(a[j-1]>x)){
a[j] = a[j-1];
j = j -1;
}
a[j] = x;
i = i+1;
}
}
int main()
{
int N,i;
int *a;
printf("Please input the number of the array:");
scanf("%d", &N);
a = (int* )malloc(N*sizeof(int));
for(i=0; i<N; i++)
scanf("%d",&a[i]);
insertionsort(a, N);
for(i=0; i<N; i++)
printf("%3d",a[i]);
}

算法作用:将一个无序的数组a 按照非降序排序!

算法思想:首先把数组a[] 的第一个元素放在数组 b[]中,然后从a[1]开始和a[0] 进行比较,如果小于a[0],那么跟a[0] 交换,直到将a 中的元素遍历完成。下次循环从a[2]开始依次比较和a[1] 的大小,如果小于a[1],那么跟a[1] 交换,直到将a 中的元素遍历完成。依次执行步骤,直到所有的数据排序完成!

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
#include<stdio.h>
#include<malloc.h>
void selectionsort(int a[], int N)
{
int i,j,k;
for (i=1; i<N; i++)
{
for (j=i; j<N; j++)
{
if(a[j]<a[i-1])
{
k = a[i-1];
a[i-1] = a[j];
a[j] = k;
}
}
}
}
int main()
{
int N,i;
int *a;
printf("Please input the numbers:");
scanf("%d", &N);
a = (int* )malloc(N*sizeof(int));
for(i=0; i<N; i++)
scanf("%d",&a[i]);

selectionsort(a, N);
for(i=0; i<N; i++)
printf("%d",a[i]);
}

对于数组的形参: int *aint a[]效果相同

函数的声明中,只需要声明函数参数的类型以及参数的个数即可,不必加上参数的变量

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
#include<stdio.h>
#include<malloc.h>
void myprint(int *,int);
void merge(int* a, int p, int q, int r)
{
int s,t,k;
int *b;
int i;
b = (int*)malloc((r-p+1)*sizeof(int));
s = p;
t = q+1;
k = 0;
while ((s<=q)&&(t<=r))
if(a[s]<=a[t])
b[k++] = a[s++];
else
b[k++] = a[t++];
if(s == q + 1)
while (t<=r)
b[k++] = a[t++];
else
while (s<=q)
b[k++] = a[s++];
k = 0;
while (p<=r)
{
a[p++] = b[k++];
}
}
int main()
{
int N,j;
int *a = NULL;
printf("Please input the numbers:");
scanf("%d", &N);
a = (int* )malloc(N*sizeof(int));
for(j=0; j<N; j++)
{
scanf("%d",&a[j]);
}
int s,i;
int t = 1;
while(t<=N)
{
s = t; //s代表是被合并的数组大小,t代表的是合并之后的每一组的数组大小!
t = 2*s;
i = 0; //i代表要合并的下一组的首项的下标
while(i+t<=N)
{
merge(a,i,i+s-1,i+t-1);
i = i+t;
}
if ((i+s)<=(N-1)) // n-1 是最后元素的下标
{
merge(a,i,i+s-1,N-1);
}
}
myprint(a,N);
}
void myprint(int *a , int n){
int i;
for(i = 0; i < n; i++)
printf("%3d",a[i]);
printf("\n");
}

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
#include<stdio.h>
#include<malloc.h>
int Binsearch(int a[],int N,int whichnumber)
{
int low, high, mid,j;
j = -1;
low = 0;
high = N-1;
while ((low <= high)&&(j == -1))
{
mid = (low + high)/2;
if (a[mid] == whichnumber) j = mid+1;
else if (a[mid] > whichnumber) high = mid - 1;
else low = mid + 1;
}
return j;
}
int main()
{
int N,M;
int *a;
char *b;
int i;
printf("Please input the number of the array : ");
scanf("%d ",&N);
a = (int*)malloc(N*sizeof(int));
for (i = 0; i < N; i++)
scanf("%d", &a[i]);

int where,whichnumber;
printf("Please input which number would you want to find :");
scanf("%d", &whichnumber);
where = Binsearch(a, N, whichnumber);
if (where==-1)
{
printf("error!");
}
else
printf("%d",where);
}

算法作用:一个数组a[0,…,p…,q…,r,…],其中子数组a[p,..,q]和a[q+1,…,r]两个数组是升序的数组,通过merge算法将这两个数组合并变成一个升序的数组。

算法思想:将b[]矩阵作为缓冲矩阵,用s,t指向这两个子数组的首元素,然后一次循环比较两个数组的元素大小,将较小的元素赋值给数组b[],直到两个子数组中的其中一个遍历完全。然后把未遍历完的子数组元素赋值给b[]。最后将b[]赋值给a[]。

注意事项:

  • “ = =” 与“ = ” 号的区别!!!“ && ” 和“ & ”的区别!!!
  • 定义一个int型大小为N的数组的时候,例如下面的第7行和第9行,必须声明b为int型的指针,然后指向的位置是一个(r-p+1)*sizeof(int)大小的存储空间,注意这个大小的表达方式,写成b = (int*)malloc(sizeof((r-p+1)*int));这样是不对的!
  • 数组元素一定是从a[0]开始的,例如下面的例子中如果将12行改为k=p。由于b是一个(r-p+1)大小的数组,所以下面的b标号也就从p开始了,但是前面的0到p-1还是占着b的位置的。所以会造成溢出!
  • 注意 ++ 和 = +1的区别!25行到38行的两种表达方式的区别!
  • 对于以后要用到的数据,如果用途不同,要采用赋值的方法解决,比如下面的s,t,k的定义。
  • 数组作为参数的传递,第4行和第57行的。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
#include<stdio.h>
#include<malloc.h>

void merge(int a[], int p, int q, int r)
{
int s,t,k;
int *b;
int i;
b = (int*)malloc((r-p+1)*sizeof(int));
s = p;
t = q+1;
k = 0;
while ((s<=q)&&(t<=r))
if(a[s]<=a[t])
b[k++] = a[s++];
else
b[k++] = a[t++];
if(s == q + 1)
while (t<=r)
b[k++] = a[t++];
else
while (s<=q)
b[k++] = a[s++];
k = 0;
while (p<=r)
{
printf("%3d", b[k]);
a[p++] = b[k++];
}
/*
while (p<=r)
{
a[p] = b[k];
printf("%3d", b[k]);
p = p + 1;
k = k + 1;
}
*/
printf("\n");
}
int main()
{
int N,i,p,q,r;
int *a;
printf("Please input the numbers of array:");
scanf("%d", &N);
a = (int* )malloc(N*sizeof(int));
printf("Please input the array:"); //输入的时候注意要输入两个递增的子数列!
for(i=0; i<N; i++)
scanf("%d",&a[i]);
printf("Please input the first begin number:");
scanf("%d", &p);
printf("Please input the first end number:");
scanf("%d", &q);
printf("Please input the second end number:");
scanf("%d", &r);
merge(a,p,q,r);
for (i = 0; i < N; i++)
printf("%3d",a[i]);
return 0;
}

环境变量生效

以修改环境变量“PATH”为例,
修改完成后,进入DOS命令提示符,
输入:set PATH=C:,关闭DOS窗口。
再次打开DOS窗口,输入:echo %PATH%
可以发现“我的电脑”->“属性”->“高级”->“环境变量”中设置的 PATH 值已经生效。

Anaconda环境变量

此电脑->右键选择属性->高级系统设置->环境变量->系统变量->path添加anaconda的安装路径。即可在任意终端中打开python

出现“conda 不是内部命令”的情况,则需要将anaconda安装目录下的Scripts也加入到系统变量中,步骤同上,就可以解决

阅读全文 »

安装VSFTPD

1
yum install vsftpd

启动vsftpd:

1
systemctl start vsftpd.service

设置vsftpd开机自启动:

阅读全文 »

CPU

① cpu主频=外频(和外部组件交换数据的速度,内存总线速度)×倍频(内部用于加速工作性能的倍数)

② 缓存,核心架构,指令集(多媒体,虚拟化,省电),电压

③ cpu一次能解析的数据量为字组大小(32,64)所以32位cpu由于字组小,所以最大支持内存4G。用字组称呼架构

④ cpu的外频和内存的外频一致最佳。

阅读全文 »

six

desert沙漠
dessert甜食

stuff材料
stuffy不通气的

meadow牧场
pasture牧场
ranch大牧场
shadow阴影
gesture手势

theory
theorem

阅读全文 »

前言:

实体机相对于虚拟机而言有自己独特的优势,例如性能更好之类的,于是我们就又写了一篇关于实体机的安装经验。并在文章的结尾加上了原理篇,可能由于笔者水平,写的并不是太好懂,但是这是笔者从许多论坛、电脑杂志、书籍总结出来的经验。遇到安装问题,可以参考着原理去找原因。如果问题还没有解决,欢迎留言。
准备工具:

  • ubuntu系统
  • 大于4G可被格式化的U盘一只
  • 电脑
  • rufus烧录软件。官网地址:http://rufus.akeo.ie/

第一步:烧录ubuntu系统。

插上U盘,打开rufus软件,如下图所示,设备选择自己的U盘,。为了保证可以从uefi启动,这里的文件系统选择FAT或者FAT32,其他的保持默认。

阅读全文 »