嵌入式学习第七天——排序、查找、字符串

 

目录

排序

选择排序

冒泡排序

插入排序 

查找

二分查找(折半查找)

一维字符型数组


排序

排序是按照一定的顺序排列,从小到大——升序;从大到小——降序,在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的字符串也不会有提醒,并会造成数据溢出

  • 3
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值