首页 > 编程语言 >从零开始备战蓝桥杯——一天一个小算法第一天(排序篇)

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

时间:2024-07-15 09:26:00浏览次数:18  
标签:数字 int 冒泡排序 蓝桥 算法 从零开始 排序

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

冒泡排序

思想:

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

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

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

事例:

假设我们有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今天的算法内容就到这了,今天是学算法的第一天,算法最重要的内容是要多练,你的放弃可能会成就更多的人,我们明天再见。

标签:数字,int,冒泡排序,蓝桥,算法,从零开始,排序
From: https://blog.csdn.net/2301_80646112/article/details/140320854

相关文章

  • Java实现堆排序算法详解及优化
    引言堆排序(HeapSort)是一种基于堆数据结构的比较排序算法。它具有良好的时间复杂度特性,在许多实际应用中表现出色。本文将详细讲解如何使用Java实现堆排序算法,并结合图解和实例代码,帮助您全面理解这一高级排序算法。同时,我们还将探讨堆排序的优化方法,以进一步提高其性能。......
  • 排序-java(详解)
    一,分类主要的排序大致分为以下几类:1,插入排序,又分为直接插入排序和希尔排序2,选择排序,又分为选择排序和堆排序3,交换排序,又分为冒泡排序和快速排序4,归并排序 二,插入排序1,直接插入排序一个数组,定义两个变量i和j,i从数组的第二个元素开始往后遍历,直到数组结束。每次遍历把......
  • 拓扑排序——AcWing 164. 可达性统计
    目录拓扑排序定义运用情况注意事项解题思路AcWing164.可达性统计题目描述运行代码代码思路改进思路拓扑排序定义拓扑排序(TopologicalSort)是对有向无环图(DirectedAcyclicGraph,简称DAG)的一种排序方式。在一个有向无环图中,拓扑排序的结果是一个线性的顶点序列,其......
  • Floyd算法——AcWing 343. 排序
    目录Floyd算法定义运用情况注意事项解题思路基本步骤AcWing343.排序 题目描述运行代码代码思路改进思路Floyd算法定义Floyd算法,全称Floyd-Warshall算法,是一种用于解决图中所有顶点对之间的最短路径问题的动态规划算法。它适用于带权有向图,且可以处理负权重边(......
  • 题解:CodeForces 843A Sorting by Subsequences[模拟/排序]
    CodeForces843AA.SortingbySubsequencestimelimitpertest:1secondmemorylimitpertest:256megabytesinputstandardinputoutputstandardoutputYouaregivenasequence\(a_1, a_2, ..., a_n\)consistingofdifferentintegers.Itisrequiredtos......
  • 手把手教你:从零开始创建Gradle项目
    手把手教你:从零开始创建Gradle项目在当今快速发展的软件开发领域,自动化构建工具成为了提高开发效率和质量的关键。Gradle,以其灵活的配置和强大的依赖管理功能,成为了Java和其他语言项目的首选构建工具。本文将带领你一步步创建一个新的Gradle项目,让你快速上手这个强大的自动......
  • 力扣-81. 搜索旋转排序数组 II
    1.题目题目地址(81.搜索旋转排序数组II-力扣(LeetCode))https://leetcode.cn/problems/search-in-rotated-sorted-array-ii/题目描述已知存在一个按非降序排列的整数数组nums,数组中的值不必互不相同。在传递给函数之前,nums在预先未知的某个下标k(0<=k<nums.length)上......
  • 力扣·33. 搜索旋转排序数组
    1.题目题目地址(33.搜索旋转排序数组-力扣(LeetCode))https://leetcode.cn/problems/search-in-rotated-sorted-array/题目描述整数数组nums按升序排列,数组中的值互不相同。在传递给函数之前,nums在预先未知的某个下标k(0<=k<nums.length)上进行了旋转,使数组变为[n......
  • js实现归并排序算法
    在JavaScript中实现归并排序可以通过递归的方式完成。归并排序使用了“分而治之”的策略,将数组递归地分成两个子数组,分别进行排序,然后将它们合并成一个有序数组。以下是一个简单的归并排序实现:functionmergeSort(arr){//如果数组只有一个元素或为空,则直接返回数组......
  • js实现快速排序算法
    在JavaScript中实现快速排序可以通过递归方式来完成。下面是一个示例代码:functionquickSort(arr){//如果数组为空或只有一个元素,则无需排序if(arr.length<=1){returnarr;}//选择基准元素(这里选择中间元素)constpivotIndex=Math.fl......