数组(6~7)

前言:

我们已经了解了关于数组的一些基本知识,下面开始我们的进阶操作:查找元素和元素排序!

一,数组元素的排序

想在数组中的一堆元素中找到自己想要的元素及其下标,有两种常用的查找方法:

1,顺序查找法

顾名思义就是从第一个元素开始依次查找,代码及其解析如下:

//设定为在n个数中查找自己想找的数x
int a[10],b[10],i,n,x,j=0;
cin>>n;
for(i=0;i,n;i++)
{
    cin>>a[i];
}
cin>>x;
//开始顺序查找
for(i=0;i<n;i++)
{
    if(a[i]==x)
    {
        //把找到的数的下标组成新的数组b,方便从中获取元素的下标
        b[j]=i;
        //下面的j代表数组a中含有x的个数
        j++
    }
}
if(j!=0)
{
    //输出个数
    cout<<j<<endl;
}
else
cout<<"NO"<<endl;
    

2,二分查找法

此方法用于数组元素按顺序排列的情况,可大大减少运行的的次数,先将想找到的数与中间项比较,如果不是再根据大小重新划定范围,具体代码及解析如下:

int low=0,high=n-1,a[100],mid;
cin>>n;
while(low<=high)
{
    //取中值
    mid=(low+high)/2;
    //找x,如果x恰好是中值则直接输出
    if(x==a[mid)
    {
        cout<<mid<<endl;
        break;
    }
    else
    {
        //如果x比中值大则将最小值改到中值右边一个单位
        if(x>a[mid])
        {
            low=mid+1;
        }
        //如果x比中值小则将最大值改到中值左边一个单位
        else
        {
            high=mid-1;
        }
}
//如果low会比high大,则数组中没有x
if(low>high)
cout<<"NO"<<endl;

那么对于不是按大小顺序排列的数组怎么办呢?在下一节会给大家带来数组元素排列的相关知识,并在后续的博客中分享数组相关习题。

二,数组元素的排序

数组的排序就是将数组从乱序变成想要的顺序的过程,我们以按大小顺序排列为例,对于上节数组6中的二分查找法就是需要数组是按从小到大顺序排列才能用的一种方法。

下面介绍两种常用的方法:

1.选择排序法

我们以从大到小位列,就是先找出最最大的数放在最左边,再从剩下的数中找到最大的放在最左边,循环往复。下面是这种方法对应的代码:

int a[100],n,i,j,max,t;
cin>>n;
for(i=0,i<n,i++)
    cin>>a[i];
//最后一个数不用比较所以就到前一项
for(i=0;i<n-1;i++)
{
    //假设起始项最大
    max=i;
    //用起始项右边的元素依次跟它比较,较大的项命名为max
    for(j=i+1;j<n;j++)
    {
        if(a[j]>a[max])
        max=j;
        如果较大的项不是起始项就把它与起始项交换位置
        if(i!=max)
        {
            t=a[i];
            a[i]=a[max];
            a[max]=t;
        }
    }
}

2.冒泡排序法

其实就是两两比较,大的在右,然后循环往复就可以了,至于为什么叫这个名字小编也不清楚(老师没说!)那就暂且这么叫吧嘿嘿。

以下是冒泡排序法的相关代码:

int a[100],n,i,j,max,t;
cin>>n;
for(i=0;i<n;i++)
cin>>a[i];
for(i=0;i<n-1;i++)
{
    max=i;
    //已经放到最右边的元素就不需要再比较了,所以n-1再减去i
    for(j=0;j<n-1-i;j++)
    {
        //每个选中的元素和它右边的元素比较
        if(a[j]>a[j+1])
        {
            t=a[j];
            a[j]=a[j+1];
            a[j+1]=t;
        }
    }
}

以上就是关于数组第6节关于数组元素查找和第7节关于数组元素排序的内容,是小编个人总结如有纰漏欢迎私信指正!

感谢大家尊重原创!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

嘻嘻哈哈的码农

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值