目录
排序
排序是按照一定的顺序排列,从小到大——升序;从大到小——降序,在C语言中通常用升序排序
选择排序
思想:给合适的位置选择合适的数
形式:
for(i = 0;i < len - 1;i++) //len为数组长度,这里用来确定位置
{
for(j = i + 1;j < len;j++) //给对应位置找合适的数
{
if(a[j]<a[i])
交换a[j]和a[i]
}
}
流程图
冒泡排序
思想:一次冒出一个数,相邻两个元素,两两比较,小的放前,大的放后
形式
for(i = 1;i<len;i++)
{
for(j=0;j<len-1;j++)
{
if(a[j]>a[j+1])
{
temp = a[j];
a[j] = a[j+1];
a[j+1] = temp;
}
}
}
流程图
插入排序
思想:在有序序列中,找到合适的位置插入
形式
for (i = 1; i < n; ++i)
{
int t = a[i];
j = i;
while(j > 0 && t < a[j-1])
{
a[j] = a[j-1];
--j;
}
a[j] = t;
}
流程图
该插入排序为原地插入,即直接在原本的数组中插入排序
还有另一种非原地插入,即在另一个数组在插入排序
查找
二分查找(折半查找)
前提:数据是有序的
思想:找到中间位置的数,拿这个数和要找的数比较,每次折一半直到找到对应的数或者结束
形式
while(begin <= end)
{
mid = (begin + end) / 2;
if(a[mid] > s)
{
end = mid -1;
}
else if(a[mid] < s)
{
begin = mid +1;
}
else
break;
}
流程图
一维字符型数组
形式:数据类型 数组名[数组长度]
从数组的角度——char s[20]={'h','e','l','l','o'};
从字符串的角度——char s[20]="hello" ;
1.字符串是当字符数组来处理的
2.字符串有一个专门的结束标志'\0'
3.处理的是字符串,操作的时候,往往以结束标志为操作依据
4.处理的是数组,操作的时候,往往以数组长度作为操作依据
5.字符数组可以用来存储字符串,而字符串在内存中存储的方式也是以字符数组形式存储的
6.字符串存储时系统会自动加'\0','\0'在存储时也占用内存
之前学输入输出时还不懂字符串,所以gets和puts没有深入了解,今天将这两个函数也重新学习
puts
int puts (const char *s)
功能:输出一个字符串
参数:s:表示字符串——指针类型,字符串组名,字符串常量
注意:puts输出是会自动加一个换行'\n'
gets
char *get(char *s)
功能:从键盘获得一个字符串
参数:s:代表需要的是一个一位字符型数组的数组名
注意:gets使用有危险,假如创建一个char a[5],该数组长度为5,但使用gets时输入一个长度超过5的字符串也不会有提醒,并会造成数据溢出