数据结构排序算法

简介: 数据结构排序算法

作为编程小白,最近在学习算法,所以想把几种排序算法温习一遍,本文所有排序都为升序,并且描述代码为java

1选择排序

1.1过程分析

对于一个不确定的整形数组,首先将i=0所在的数和后面的所有数进行比较,找出最小的数i=j交换数组中的数,下一次再从i=1开始比较,直到i=num.length-1

1.2动画分析

在这里插入图片描述

1.2算法描述

public class selectsort {
    public static void main(String[] args) {

    int[] num= {2,3,5,4,1,9,8,7,56,3,66,56,52,51,20,32};//要排序的数组
    selectsort(num);
    for(int n:num)    //增强型for语句用于输出排序后的数组
    {
        System.out.println(n);
    }
    }
    public static void selectsort(int[] num)     //构造方法
    {
        for(int i=0;i<num.length;i++)
        {
            int minindex=i;
            for(int j=i+1;j<num.length;j++)
            {
                if(num[minindex]>num[j])
                {
                    minindex=j;
                }
                            }
            swap(num,i,minindex);
        }
    }
    public static void swap(int[] num,int i,int minindex)//交换下标为i和minindex中的数组元素
    {
        int temp;
        temp=num[minindex];
        num[minindex]=num[i];
        num[i]=temp;
    }
}

1.4复杂度

时间复杂度:O(n^2)

2插入排序

2.1算法描述

在一个整形数组中,从第二个数开始,将其与前面的数比较,如果比前面的数小,则与其交换位置,直到其到达数组最左侧为止,如果比前面的数大,则开始从第三个数和前面的数比较大小

2.2动画分析

在这里插入图片描述

2.3算法代码

public class Insertsort {

    public static void main(String[] args) {
        // TODO Auto-generated method stub
        int[] num= {2,3,5,4,1,9,8,7,56,66,56,52,51,20,32};//要排序的数组
          Insertsort(num);
          for(int n:num)    //增强型for语句用于输出排序后的数组
          {
              System.out.print(n+",");
          }
    }
    public static void Insertsort(int[] num)   //排序算法
    {
        for(int i=1;i<num.length;i++)
        {
                  
            for(int j=i;j>0;j--)
            {
                if(num[j]<num[j-1])
                {
                    swap(num,j-1,j);
                }
                else{
                    break;
                }
            }
        }
    }
  public static void swap(int[] num,int index,int j)//交换两个数的下标
  {
      int temp;
      temp=num[index];
      num[index]=num[j];
      num[j]=temp;
  }
}

2.4复杂度

时间复杂度:O(n^2)

3冒泡排序(也叫气泡排序)

3.1算法描述

对于一个要排序的数组,首先从下标I=0开始+1,每当遇到两个数i和i+1,当num[i]>num[i++1]时,交换两个数的位置,在第一次遍历后,最大元素肯定在最右侧,第二次遍历后,倒数第二个大树也在右侧第二个位置上,进行num.length-1次遍历后,素组中元素被升序排序完成

3.2动态分析

在这里插入图片描述

3.3算法描述

public class Bobblesort {

    public static void main(String[] args) {
        // TODO Auto-generated method stub
        int[] num= {2,3,5,4,1,9,8,7,56,66,56,52,51,20,32};//要排序的数组
        Bobblesort(num);
        for(int n:num)    //增强型for语句用于输出排序后的数组
        {
            System.out.print(n+",");
        }
    }

    private static void Bobblesort(int[] num) {
        for(int i=0;i<num.length;i++)
        {
            for(int j=0;j<num.length-i-1;j++)
            {
                if(num[j]>num[j+1])
                {
                    swap(num,j,j+1);
                }
            }
        }
        
    }
    public static void swap(int[] num,int index,int j)//交换两个数的下标
      {
          int temp;
          temp=num[index];
          num[index]=num[j];
          num[j]=temp;
      }
}

3.4复杂度

时间复杂度:O(n^2)
未完待续..........................

相关文章
|
2月前
|
算法 数据处理 C语言
C语言中的位运算技巧,涵盖基本概念、应用场景、实用技巧及示例代码,并讨论了位运算的性能优势及其与其他数据结构和算法的结合
本文深入解析了C语言中的位运算技巧,涵盖基本概念、应用场景、实用技巧及示例代码,并讨论了位运算的性能优势及其与其他数据结构和算法的结合,旨在帮助读者掌握这一高效的数据处理方法。
51 1
|
3月前
|
存储 人工智能 算法
数据结构与算法细节篇之最短路径问题:Dijkstra和Floyd算法详细描述,java语言实现。
这篇文章详细介绍了Dijkstra和Floyd算法,这两种算法分别用于解决单源和多源最短路径问题,并且提供了Java语言的实现代码。
101 3
数据结构与算法细节篇之最短路径问题:Dijkstra和Floyd算法详细描述,java语言实现。
|
2月前
|
存储 算法 搜索推荐
Python 中数据结构和算法的关系
数据结构是算法的载体,算法是对数据结构的操作和运用。它们共同构成了计算机程序的核心,对于提高程序的质量和性能具有至关重要的作用
|
2月前
|
数据采集 存储 算法
Python 中的数据结构和算法优化策略
Python中的数据结构和算法如何进行优化?
|
2月前
|
算法
数据结构之路由表查找算法(深度优先搜索和宽度优先搜索)
在网络通信中,路由表用于指导数据包的传输路径。本文介绍了两种常用的路由表查找算法——深度优先算法(DFS)和宽度优先算法(BFS)。DFS使用栈实现,适合路径问题;BFS使用队列,保证找到最短路径。两者均能有效查找路由信息,但适用场景不同,需根据具体需求选择。文中还提供了这两种算法的核心代码及测试结果,验证了算法的有效性。
112 23
|
2月前
|
算法
数据结构之蜜蜂算法
蜜蜂算法是一种受蜜蜂觅食行为启发的优化算法,通过模拟蜜蜂的群体智能来解决优化问题。本文介绍了蜜蜂算法的基本原理、数据结构设计、核心代码实现及算法优缺点。算法通过迭代更新蜜蜂位置,逐步优化适应度,最终找到问题的最优解。代码实现了单链表结构,用于管理蜜蜂节点,并通过适应度计算、节点移动等操作实现算法的核心功能。蜜蜂算法具有全局寻优能力强、参数设置简单等优点,但也存在对初始化参数敏感、计算复杂度高等缺点。
63 20
|
2月前
|
机器学习/深度学习 算法 C++
数据结构之鲸鱼算法
鲸鱼算法(Whale Optimization Algorithm,WOA)是由伊朗研究员Seyedali Mirjalili于2016年提出的一种基于群体智能的全局优化算法,灵感源自鲸鱼捕食时的群体协作行为。该算法通过模拟鲸鱼的围捕猎物和喷出气泡网的行为,结合全局搜索和局部搜索策略,有效解决了复杂问题的优化需求。其应用广泛,涵盖函数优化、机器学习、图像处理等领域。鲸鱼算法以其简单直观的特点,成为初学者友好型的优化工具,但同时也存在参数敏感、可能陷入局部最优等问题。提供的C++代码示例展示了算法的基本实现和运行过程。
59 0
|
3月前
|
机器学习/深度学习 存储 缓存
数据结构与算法学习十:排序算法介绍、时间频度、时间复杂度、常用时间复杂度介绍
文章主要介绍了排序算法的分类、时间复杂度的概念和计算方法,以及常见的时间复杂度级别,并简单提及了空间复杂度。
51 1
数据结构与算法学习十:排序算法介绍、时间频度、时间复杂度、常用时间复杂度介绍
|
2月前
|
算法 vr&ar 计算机视觉
数据结构之洪水填充算法(DFS)
洪水填充算法是一种基于深度优先搜索(DFS)的图像处理技术,主要用于区域填充和图像分割。通过递归或栈的方式探索图像中的连通区域并进行颜色替换。本文介绍了算法的基本原理、数据结构设计(如链表和栈)、核心代码实现及应用实例,展示了算法在图像编辑等领域的高效性和灵活性。同时,文中也讨论了算法的优缺点,如实现简单但可能存在堆栈溢出的风险等。
60 0
|
3月前
|
存储 算法 Java
Set接口及其主要实现类(如HashSet、TreeSet)如何通过特定数据结构和算法确保元素唯一性
Java Set因其“无重复”特性在集合框架中独树一帜。本文解析了Set接口及其主要实现类(如HashSet、TreeSet)如何通过特定数据结构和算法确保元素唯一性,并提供了最佳实践建议,包括选择合适的Set实现类和正确实现自定义对象的hashCode()与equals()方法。
56 4