选择排序法:从头找到尾,挑选最大值,将其位置进行互换。
算法描述:for(i = 0;i < n;i++){ 从a[i]到a[n-1]中寻找最大元素a[t]把a[t]与a[i]交换}
例:void print(int a[],int num){for(int i = 0;i < num;i++){cout << a[i] << “\t”; } cout << endl;}
//排序
void sort(int a[],int num)
{ int t;
for(int i = 0;i < num-1;i++)
{ for(int j = i+1;j < num;j++)
{ //若升序将 > 改为 <
if(a[j] > a[i])
{ t = a[i];
a[i] = a[j];
a[j] = t;
}}}}
void main()
{ int a[10]; srand(time(0));//调用种子函数,使用time()函数需包含time.h文件
for(int i = 0;i < 10;i++){a[i] = rand() % 100;}//对a进行初始化
print(a,10); sort(a,10); print(a,10);
}
在这里呢!使用了随机函数对a进行了初始化;
rand() :随机函数。返回0~32767的随机值。该函数没有参数。
srand(number) :种子函数。要求一个无符号整型参数随机生成器的启动值为使种子值可变,用系统时间做srand函数的参数。
time() :时间函数,在time.h定义。用0做参数的时候,返回系统当前时间。
冒泡排序法:采用相邻元素比较的方法。
示例:对数组元素进行升序排序。
例:void print(int a[],int num){for(int i = 0;i < num;i++){cout << a[i] << “\t”; } cout << endl;}
//排序
void sort(int a[],int num)
{ int t,work;
for(int i = 1;i < num;i++)
{ work = 1;
for(int j = 0;j < num-i;j++)
{ //若降序将 > 改为 <
if(a[j] > a[j+1])
{ t = a[j];
a[j] = a[j + 1];
a[j + 1] = t;
work = 0;
}}
if(work)
{ break;
}}}
void main()
{ int a[10]; srand(time(0));//调用种子函数,使用time()函数需包含time.h文件
for(int i = 0;i < 10;i++){a[i] = rand() % 100;}//对a进行初始化
print(a,10); sort(a,10); print(a,10);
}
动态储存:
C++的动态储存分配机制可以根据需要在程序运行时建立和撤销对象。
new 和 delete 操作符:
new 运算符 :动态分配堆内存。
使用形式:指针变量 = new 类型(常量); 指针变量 = new 类型[表达式];
作用:从堆分配一块“类型”大小储存空间,返回首地址,其中“常量”是初始化值,可缺省,创建数组对象时,可以为对象指定初始值。
delete 运算符:运算释放已分配的内存空间。
使用形式:delete 指针变量; delete[] 指针变量;
其中指针必须是一个new 返回的指针。
int *intp = new int; int *intarrp = new int[5];
delete intp; delete intarrp[];
例子:使用new创建动态数组
void Arr(int *&p,int n)
{
srand(time(0));
p = new int[n];
if(p == NULL){cout << “创建失败!” << endl; return ;}
for(int i = 0;i < n;i++)
{
p[i] = rand() % 100;
//*(p + i) = rand() % 100;}
}
void print(int *p,int n)
{ for(int i = 0;i < n;i++)
{cout << p[i] << "\t"; //cout << *(p + i) << "\t";}cout << endl;}
void main()
{
int *p = NULL; int n;
cin >> n; Arr(p,n); print(p,n);
}
字符数组与字符串:C++没有字符串类型,以字符数组作为字符串。
“ \0 ”作为字符串的结束标记。
“ \0 ”是ASCII码为0的不可显示字符,即“空字符”。
对字符数组以字符串常量进行初始化时,自动添加“ \0 ”。
字符数组不同的初始化方式:
char str1[2] = {‘a’,’b’}; //逐个字符对数组元素赋初始值:
char str2[3] = {“abc”}; char str3[] = “abc”; //用串常量初始化
用字符指针管理串:char *str[2] = {“acc”,”agg”};
字符串的访问:字符串常量/字符数组名/字符指针都表示字符串。
输出字符指针就是输出整个字符串(全部字符串)。
输出字符指针的间接引用是输出单个字符。
字符串名的直接比较是地址比较。
例:void print(char p[]){ for(int i = 0;p != ‘\0’;i++){cout << p[i] << “ ”} cout << endl;}
void main()
{ char p[2] = { 'a','b' }; //print(p); //p没有结束符
char p1[3] = { 'a','b','\0' }; print(p1);
}
//字符指针表示串
void print(char *p[]){for(int i = 0;p != “\0”;i++){cout << p[i] << “ ”}cout << endl;}
void main()
{ char *str = “kkkajf”; cout << str << endl;
char *p[2] = { 'a44','b44' }; //print(p); //p没有结束符
char *p1[3] = { 'a543','b55','\0' }; print(p1);
}
字符串处理函数:string.h
字符串长度 | int strlen(const char*s); |
字符串复制 | char *strcpy_s(char *s1,const char *s2); |
字符串连接 | char *strcat_s(char *s1,const char *s2); |
字符串比较 | int strcmp(const char*s1,const char *s2) |
| int strncmp(const char *s1,const char *s2,int n) |
转换小写字母 | void strlwr(char *s) |
转换大写字母 | void strupr(char *s) |