自学嵌入式第七天:排序、查找和一维数组

排序
(1)从小到大——升序
(2)从大到小——降序

选择排序
冒泡排序
插入排序
快速排序
    
选择排序:
    思想:给合适的位置选择合适的数 

#include<stdio.h>
int main(void)
{

	int i=0,j=0,temp;
	int a[]={1,8,34,3,2,0,9};
	int len=sizeof(a)/sizeof(a[0]);



	for(i=0;i<len-1;++i)		//要确定的位置
	{
		for(j=i+1;j<len;++j)	//给对应位置找合适的数
		{
			if(a[j]<a[i])		//如果找到比当前位置小的
			{
				temp=a[i];		//交换a[i]与a[j]
				a[i]=a[j];
				a[j]=temp;
			}
		}
	}

	printf("a[%d]={ ",len);

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

	printf("}\n");

	return 0;
}


冒泡排序:
    思想:一次冒出一个数,相邻两个元素两两比较,小的放前 大的放后

#include<stdio.h>
int main(void)
{
	int i=0,j=0,len,temp;
	int a[]={1,3,4,2,5,6,8,7};
	len=sizeof(a)/sizeof(a[0]);

	for(i=1;i<len;++i)
	{
		for(j=0;j<len-i;++j)
		{
			if(a[j]>a[j+1])
			{
				temp=a[j];
				a[j]=a[j+1];
				a[j+1]=temp;
			}
		}
	}

	printf("a[%d]={ ",len);

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

	printf("}\n");

	return 0;
} 

插入排序:
    思想:在有序序列中,找到合适的位置插入

#include<stdio.h>
int main(void)
{
	int i=0,j=0,len,temp;
	int a[]={1,2,4,29,6,8,7};
	len=sizeof(a)/sizeof(a[0]);	
	int b[len];


	/*	for(i=1;i<len;++i)				//第i个数被拿走去插入
		{

		temp=a[i];						//拿走第i个数
		j=i;							//第i个数,区分于下面的j


		while(j>0 && temp<b[j-1])		//判断第i个数是否小于前面的数
		{

		b[j]=b[j-1];					//前面的数后挪给第i个数留位置
		--j;							//自减(继续向前比)
		}


		b[j]=temp;						//放数据
		}*/

	for(i=0;i<len;++i)
	{
		temp=a[i];
		j=i;


		while(j>0&&temp<a[j-1])
		{
			a[j]=a[j-1];
			--j;
		}

		a[j]=temp;

	}



	printf("a[%d]={ ",len);


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


	printf("}\n");

	return 0;
}


    
 查找算法
    二分算法(折半查找)

    大前提:
        数据有序
        

#include<stdio.h>
int main(void)
{
	int i=0,j=0,len,temp;
	int a[]={1,2,4,29,6,8,7};
	len=sizeof(a)/sizeof(a[0]);	
	//排序
	for(i=0;i<len;++i)
	{
		temp=a[i];
		j=i;
		while(j>0&&temp<a[j-1])
		{
			a[j]=a[j-1];
			--j;
		}
		a[j]=temp;
	}

	//查找
	int	begin,end,mid,m;
	begin=0;
	end=len-1;

	printf("输入要查找的数:");
	scanf("%d",&m);
	while(begin<=end)
	{	
		mid=(begin+end)/2;
		if(a[mid]>m)
		{
			end=mid-1;
		}
		else if(a[mid]<m)
		{
			begin=mid+1;
		}
		else
		{
			break;
		}
	}



	if(begin<=end)
	{
		printf("yes\n");
	}
	else
	{
		printf("no\n");
	}

	return 0;
}


    思想:找到中间位置的数
          拿这个数和要找的数比较
                   
一维字符数组
    数据类型    数组名    [数组长度]
    char          s            []            一维字符型数组
    
从数组角度:
    char s[20]={'a','b','c'};
    数组是用来存放数据
    一维字符型数组用来——————放字符串

    字符串形式
char s[20]={“hello”};

1.字符串是当作字符数组来处理的
2.字符串有一个专门的结束标志:‘\0’
3.处理的是 字符串,操作时候往往以    结束标志 为操作依据
4.处理的是 数组  ,操作时候往往以    数组长度 为操作依据
5.字符数组可以用来存储字符串
    而字符串在内存中储存的方式 也是以 字符数组形式存储的
    
    实际占用空间包含‘\0’
    “” 空字符串
    \0 是字符串的标志
    

puts:
    输出一个字符串
int puts(const char*s);
    功能 输出一个字符串
    参数:
    const char*s ;        表示字符串——指针类型
                        字符数组名
                        字符串常量
    返回值:
        成功 非负数
        失败 -1
    puts 输出时自动换行

char gets(char*s);
    功能:从键盘获得一个字符串
    参数:

返回值:
    成功 s
    失败 null

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值