插入排序、二分查找以及字符型数组的操作——day8

今天,主要学习了插入排序、二分查找以及字符型数组的一些操作,接下来主要介绍原理以及在实践中应用

插入排序

插入排序的思想主要就是:在有序的一组数列中找到一个合适的位置,将该值插入进去
在这里插入图片描述
如图,a是一个无序数组,正在进行的过程是将a[5]插入到b数组中,首先a[5]会和b[4]比大小,若a[5]值大,则直接插入到b[5]中,反之,将b[4]的值赋值给b[5],继续将a[5]的值跟b[3]作比较,以此类推。

#include<stdio.h>

int main(void)
{
	int a[10] = {1,2,3,4,5,6,7,8,9,10};
	int i,j,t;
	int len = sizeof(a) / sizeof(a[0]);
	
**	for(i = 0;i < len;++i)
	{
		t = a[i];
		while(i > 0 && a[i - 1] < t)
		{
			a[i] = a[i - 1];
			--i;
		}
		a[i] = t;
**	}

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

	putchar('\n');
}
**标出来的那一段是插入排序算法的核心。
这是一个有顺序的数组,将它进行插入排序,让a数组最后逆序打出来。

二分查找

二分查找也叫做折半查找,但是他有一个前提,就是数据必须有序。
在这里插入图片描述
比如说如图所示,需要查找的数是3:
(1)首先取到中间值a[mid],判断3与a[mid]比大小,可以看出a[mid]大于3,故而令end = end - 1,mid = (begin + end )/ 2
(2)判断3与a[mid]比大小,此时a[mid] = 2,得到3大于a[mid],故令begin = mid + 1,mid = (begin + end )/ 2
(3)继续判断3与a[mid]比大小,此时a[mid] = 3,刚好等于3,就可以查找到该数据了。

#include<stdio.h>

int main(void)
{
	int a[] = {1,2,3,4,5,6,7,8,9,10,55,77,99,888};
	int len = sizeof(a) / sizeof(a[0]);
	int begin = 0;
	int end = len-1;
	int mid,n;
	scanf("%d",&n);

	while(begin <= end)
	{
		mid = (begin + end) / 2;
		if(a[mid] > n)
		{
			end = mid - 1;
		}
		else if(a[mid] < n)
		{
			begin = mid + 1;
		}else
		{
			break;
		}
	}
	
	if(begin <= end)
	{
		printf("找到了");
	}else
	{
		printf("没找到");
	}

	return 0;
}

接下来,讲一下字符型数组的一些操作

字符数据:
	unsigned char  s[10]; // 
	unsigned char  s[10] = {'h','e','l','l','o'};
	其主要作用就说处理字符串数据。

如果将"hello"输入进去,可以表示为:
	unsigned char  s[10] = "hello"; 
	unsigned char  s[10] = {'h','e','l','l','o','\0'};
	//'\0' 对于字符串来说,叫结束标志 

unsigned char  s[] = {'h','e','l','l','o','\0'};  
unsigned char  s[] = {'h','e','l','l','o'};  
	//表示的不一样,一个表示字符串(因为有'\0')

注意:
 1.字符串 -- 更关注的是字符串整体,而不是单个字符 
 2.字符串的结束标志 比较重要 ,表示字符串结束 
 3.处理字符串时,常常使用结束标志作为判断 

int puts(const char *s);
 功能:
    输出字符串 
 参数:
    @s 字符串所在空间的首地址 
 返回值:
    int 成功 >0 
	    失败 -1 
		
	"hello" // '\0'

特点:
  输出时,自动换行



char *gets(char *s);
 功能:
     输入字符串 
 参数:
    @s 存放字符串一块内存空间 
返回值:
    表示的是 存储字符串那块空间首地址
  • 11
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值