从零开始备战蓝桥杯——一天一个小算法第一天(排序篇)

今天使我们学习算法的第一天,算法内容为冒泡排序和选择排序。

冒泡排序

思想:

两两相邻数字排序,小的放在前面大的放在后面。

从左往右遍历,不断重复第一步,这样可以永远保证大的在最后面

重复上述操作,可以得到一个数组从小到大的排序。

事例:

假设我们有n个数字。

第一次比较遍历全部数字,进行两两比较,小的在前,大的在后,最后最大的数字排在最后数第二的位置。

循环往复,直至全部。

时间复杂度为o(n^2) 空间复杂度为o(1)

python代码如下:
n=int(input())#多少数字
a=list(map(int,input().split()))#读取整型数字为列表。
for i in range(1,n):
    for j in range(n-i):#第一次遍历全部数字,往后逐渐减小,因为n个数字最大的下标为n-1所以i要从1开始
        if a[j]>a[j+1]:
            a[j],a[j+1]=a[j+1],a[j]#如果前面的数字大于后面的数字则交换顺序。
print(a)
 c++代码如下:
#include <algorithm>
#include <iostream>
using namespace std;
const int N = 1e3+1;
int a[N];//一千以内的数组排序
int main()
{
  int n;cin>>n;
  for(int i =0;i<n;i++)cin>>a[i];
  for(int i =1;i<n;i++)
  {
    for(int j=0;j<n-i;j++)
    {
      if(a[j]>a[j+1])
      {
        swap(a[j],a[j+1]);//交换两数位置。
      }
    }
  } 
  for (int i = 0; i < n; i++)cout << a[i]<<" ";
    return 0;
}

 学会冒泡排序,就去蓝桥官网用刚学会的排序做到题目试一下吧。

蓝桥账户中心icon-default.png?t=N7T8https://www.lanqiao.cn/problems/3225/learning/?page=1&first_category_id=1&problem_id=3225

随后我们来学习选择排序。

选择排序

思想:

选择排序与冒泡排序相似,可以找出最小的数字或则最大的数字放在最前面或最后面。

首先从左往右选择最小的元素放在第一个位置。

之后选择第二小的元素放在第二个位置。

重复上述操作,依次找到最小,第二小,第三小......。

事例:

假设我们有n个数字。

首先从[0,n-1]找到最小的数字,放在第一位。

随后从[1,n-1]中找到第二小的数字,放在第二位。

再从[2,n-1]中找到第三小的数字,放在第三位。

循环往复,直至全部。

时间复杂度为 o(n^2)空间复杂度为o(1)

python代码如下:
n=int(input())#多少数字
a=list(map(int,input().split()))
for i in range(n-1):
    min_number=a[i]#先定义最小的数字为第a[i]
    min_idx=i#定义该数字的下标为i
    for j in range(i,n):
        if a[j]<min_number:
            min_number=a[j]记录最小数字
            min_idx=j#记录最小数字位置
    a[i],a[min_idx]=a[min_idx],a[i]#将a[i]与最小的数字换位置。
print(a)
c++代码如下:
#include <algorithm>
#include <iostream>
using namespace std;
const int N = 1e3+1;
int a[N];//一千以内的数字
int main()
{
  int n;cin>>n;
  for(int i =0;i<n;i++)cin>>a[i];
  for(int i =0;i<n-1;i++)
  {
    int min_number=a[i];
    int min_ind=i;//定义一个位置
    for(int j=i;j<n;j++)
    {
      if(a[j]<min_number) 
      {
        min_number=a[j];
        min_ind=j;//将位置定义为更小数的下标
      }
    }
    swap(a[i],a[min_ind]);
  } 
  for (int i = 0; i < n; i++)cout << a[i]<<" ";
    return 0;
}

学会了选择排序,快试一下用选择排序解决排序问题吧。

蓝桥云课选择排序题

OK今天的算法内容就到这了,今天是学算法的第一天,算法最重要的内容是要多练,你的放弃可能会成就更多的人,我们明天再见。

  • 12
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是刷算法备战蓝桥杯的一些建议和步骤: 1. 熟悉蓝桥杯的考试内容和题型。了解蓝桥杯的考试规则、题目类型和难度分布,可以从蓝桥杯官方网站或者相关的参考资料中获取这些信息。 2. 学习基础知识。蓝桥杯的题目通常涉及到算法和数据结构的基础知识,例如数组、链表、栈、队列、树、图、排序算法、查找算法等。建议先学习这些基础知识,掌握它们的原理和常见的应用场景。 3. 刷题练习。通过刷题来提高算法和编程能力是非常重要的。可以选择一些经典的算法题目进行练习,例如ACM/ICPC、LeetCode、牛客网等平台上的题目。刷题的过程中要注重理解题目的要求,分析问题的解决思路,编写代码实现解决方案,并进行调试和测试。 4. 参加模拟考试。蓝桥杯的模拟考试可以帮助你熟悉考试的流程和题目类型,也可以检验你的学习成果。参加模拟考试后,可以分析自己的得分情况,找出自己的不足之处,并进行针对性的复习和提高。 5. 学习优秀的解题思路和代码。在刷题的过程中,可以学习一些优秀的解题思路和代码,了解不同的解题方法和技巧。可以通过查阅相关的参考书籍、博客、论坛等获取这些信息。 6. 多做实战训练。除了刷题,还可以参加一些实战训练,例如参加ACM/ICPC比赛、编程竞赛等。这些实战训练可以提高你的编程能力和解题速度,也可以锻炼你的团队合作和应对压力的能力。 7. 多与他人交流和讨论。与他人交流和讨论可以帮助你更好地理解和掌握算法和编程知识。可以加入一些算法学习群组、论坛或者参加一些线下的学习活动,与其他学习者一起交流和分享经验。 8. 坚持练习和复习。刷算法题是一个长期的过程,需要坚持不懈地练习和复习。每天保持一定的学习时间,不断积累和提高自己的算法和编程能力。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值