字符型数组——字符串

选择排序

思维逻辑:顺序的选择一个位置上的数,逐个地与后面进行对比,如果比后面的数大则交换位置,继续用1号为的新数和后面的进行对比。可以理解为:(比武招亲),擂台上永远一直站着一个被挑战的人。

那么如何用代码实现这一功能呢?

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

冒泡排序

冒泡排序法形象的表示为冒出一个个大的泡泡。冒泡排序法的算法思想是:相邻的两个数两两比较,大的放在放在后面小的放在前面,这样每一趟的循环会冒出一个最大数,那么下一次循环就可以较小一次比较的次数。代码编写如下:

for (i=1; i<len; ++i)
{
	for(j=0; j<len-i; ++j)
	{
		if(a[j]>a[j+1])
		{
			交换这两个数
		}
	}
}
  

在冒泡排序法中外层for表示总共循环的趟数n-1;内层for则表示为两两对比的过程。

插入排序

int i , j , tmp;
for(i = 0; i < len ; ++i)    //依次拿数
{
    tmp = a[i];    //记录拿出的数的下标和数值
    j = i;
    while(j > 0 && a[j -1] > tmp)    //从前一项开始依次比较
    {
        a[j] = a[j - 1];     //往后挪一位为插入的数做准备
        --j;
    }
    a[j] = tmp;    //找到位置之后赋值
}

二分查找

二分查找的逻辑原理是使用找中间的逻辑,通过对比中间值,然后确定往前寻找还是往后寻找,这是一种高效的寻找方式。

 int n;
 while(begin <= end)
 {
	if(a[mid]>n)
	{
		end = mid-1;
	}else if(a[mid]<n)
	{
		begin = mid +1
	}else
	{
		a[mid] = n;
		break;
	}
	if(begin <= end)
	{
		有数;
	}else
	{
		没有该数
	}
 }
#include<stdio.h>
int main()
{
    int n;
    int i,j,tmp;
    printf("please input n as:\n");
    scanf("%d",&n);
    int a[n];
    int begin,end,mid,Num;
    
    printf("input n Num:\n");
    for (i = 0; i<n; ++i)
    {
        scanf("%d",&a[i]);
    }
    for (i=1; i<n; ++i)     //冒泡排序
    {
        for(j=0; j<n-i; ++j)
        {
            if (a[j]>a[j+1])
            {
                tmp = a[j];
                a[j] = a[j+1];
               a[j] = a[j+1];
                a[j+1] = tmp;
            }

        }
    }
    for(i = 0; i<n; ++i)
    {
        printf("%d ",a[i]);
    }
    putchar('\n');
    printf("input Num you want find\n");
    scanf("%d",&Num);
    begin = 0;
    end = n - 1;
        while(begin <= end)     //二分查找
        {
            mid = (begin + end) / 2;

            if (a[mid]>Num)
            {
                end = mid - 1;
            }else if(a[mid] < Num)
            {
                begin = mid +1;
            }else
            {
                break;
            }
        }
        if (begin <= end)
        {
            printf("Num=%d is found\n",Num);
        }else
        {
            printf("no the Num");
        }
    return 0;
}

字符型数组:

其本质是使用字符存储,通过顺序的存储达到字符串的存储效果。在字符串的存储中其末尾存在结束标志\0。程序通过识别\0的位置可以确定数组中字符串存在的具体位置和空间。

字符串在输出和输出时有特定的函数:gets(s)、puts(s)

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值