排序/动态存储/字符数组

选择排序法:从头找到尾,挑选最大值,将其位置进行互换。

算法描述: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)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值