【Unity 3D】C#中冒泡排序、选择排序、插入排序等算法的详解(附源码 超详细)

简介: 【Unity 3D】C#中冒泡排序、选择排序、插入排序等算法的详解(附源码 超详细)

一、冒泡排序算法

冒泡排序算法是程序设计中一种较简单的排序算法,其原理是重复的对要排序的数进行大小比较,一次比较两个元素,如果第一个数比第二个数大,则交换顺序,把第二个小的数放在前面,不断比较,直到形成一串由小到大排序的数字

时间复杂度:如果文件的初始状态是正序的 那么时间复杂度为O(n)

如果初始文件时反序的 那么时间复杂度是O(n的平方)

综上所述 冒泡排序总的平均时间复杂度为O(n的平方)

冒泡排序算法就是把小的元素往前调或者把大的元素往后调,比较相邻的两个元素的大小,交换也发生在这两个元素之间,所以如果两个元素相等,是不会再交换的,如果两个相等的元素没有相邻,那么即使通过前面的两两交换使两个元素相邻,这时也不会再交换,所以相同元素的前后顺序并没有改变,所以冒泡排序算法是一种稳定排序算法

测试代码如下

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class Test_13_1 : MonoBehaviour
{
    void Start()
    {
        //测试数据
        int[] array = { 1, 4, 2, 43, 5, 61, 89, 34, 67, 32, 40 };
        //将数据排序
        PopSort(array);
        //排序后的数据
        for (int i = 0; i < array.Length; i++)
        {
            Debug.Log(array[i]);
        }
    }
    public void PopSort(int[] _item)
    {
        int i, j, temp;  //先定义一下要用的变量
        for (i = 0; i < _item.Length - 1; i++)
        {
            for (j = i + 1; j < _item.Length; j++)
            {
                if (_item[i] > _item[j])  //降序改为“<”
                {
                    //交换两个数的位置
                    temp = _item[i]; //把大的数放在一个临时存储位置
                    _item[i] = _item[j]; //然后把小的数赋给前一个
                    _item[j] = temp; //然后把临时位置的那个大数赋给后一个
                }
            }
        }
    }
}

二、选择排序算法

选择排序算法是一种简单直观的排序算法

首先从待排序的数据元素中选出最小或者最大的一个元素,存放到序列的起始位置,其次再从剩余的未排序元素中寻找到最小或者最大的一个元素,然后放到已排序的序列的末尾,以此类推,直到待排序的数据元素的个数为0

选择排序算法是不稳定的排序方法、

选择排序算法总的平均时间复杂度为O(n的平方)

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class Test_13_2 : MonoBehaviour
{
    void Start()
    {
        //测试数据
        int[] array = { 1, 4, 2, 43, 5, 61, 89, 34, 67, 32, 40 };
        //将数据排序
        SelectionSort(array);
        //排序后的数据
        for (int i = 0; i < array.Length; i++)
        {
            Debug.Log(array[i]);
        }
    }
    public void SelectionSort(int[] _item)
    {
        int i, j, min, len = _item.Length;
        int temp;
        for (i = 0; i < len - 1; i++)
        {
            min = i;
            for (j = i + 1; j < len; j++)
            {
                if (_item[min].CompareTo(_item[j]) > 0)
                {
                    min = j;
                }
            }
            temp = _item[min];
            _item[min] = _item[i];
            _item[i] = temp;
        }
    }
}

三、插入排序算法

插入排序是将一个记录插入已经排好序的有序表中,从而增加一个元素,有序表记录数+1,在其实现过程中,使用了双层循环,外层循环寻找第一个元素之外的所有元素,内层循环在当前有序表中根据当前元素进行插入位置查找,然后进行移动

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class Test_13_3 : MonoBehaviour
{
    void Start()
    {
        //测试数据
        int[] array = { 1, 4, 2, 43, 5, 61, 89, 34, 67, 32, 40 };
        //将数据排序
        InsertSort(array);
        //排序后的数据
        for (int i = 0; i < array.Length; i++)
        {
            Debug.Log(array[i]);
        }
    }
    public void InsertSort(int[] _item)
    {
        for (int i = 1; i < _item.Length; i++)
        {
            int temp = _item[i];
            for (int j = i - 1; j >= 0; j--)
            {
                if (_item[j] > temp)
                {
                    _item[j + 1] = _item[j];
                    _item[j] = temp;
                }
            }
        }
    }
}

创作不易 觉得有帮助请点赞关注收藏~~~

相关文章
|
8天前
|
图形学
Unity 获取鼠标位置下的UGUI或3D物体
本文总结了两种检测方法,分别用于UGUI和3D物体的检测。第一种方法`GetOverUIobj`专门用于检测鼠标悬停的UGUI元素,通过`GraphicRaycaster`实现。第二种方法`GetOverWordGameObject`则同时适用于UI和3D物体检测,利用`PhysicsRaycaster`进行射线检测。两者均返回悬停对象或null。
|
8天前
|
前端开发 图形学
unity UGUI跟随3D物体的坐标转换
在 Unity 中实现 UGUI 元素跟随 3D 物体,关键是将 3D 物体的世界坐标转换为屏幕或画布坐标。通过 Camera.WorldToScreenPoint 方法,可将 3D 物体位置映射到屏幕上,再更新 UGUI 元素的位置。代码示例展示了如何使用该方法,使 UGUI 图像跟随 3D 模型,并提供文字显示、图像和线条的显示/隐藏功能。
|
3月前
|
搜索推荐 Python
利用Python内置函数实现的冒泡排序算法
在上述代码中,`bubble_sort` 函数接受一个列表 `arr` 作为输入。通过两层循环,外层循环控制排序的轮数,内层循环用于比较相邻的元素并进行交换。如果前一个元素大于后一个元素,就将它们交换位置。
155 67
|
2月前
|
机器学习/深度学习 前端开发 算法
婚恋交友系统平台 相亲交友平台系统 婚恋交友系统APP 婚恋系统源码 婚恋交友平台开发流程 婚恋交友系统架构设计 婚恋交友系统前端/后端开发 婚恋交友系统匹配推荐算法优化
婚恋交友系统平台通过线上互动帮助单身男女找到合适伴侣,提供用户注册、个人资料填写、匹配推荐、实时聊天、社区互动等功能。开发流程包括需求分析、技术选型、系统架构设计、功能实现、测试优化和上线运维。匹配推荐算法优化是核心,通过用户行为数据分析和机器学习提高匹配准确性。
170 3
|
3月前
|
搜索推荐 算法 C语言
【排序算法】八大排序(下)(c语言实现)(附源码)
本文继续学习并实现了八大排序算法中的后四种:堆排序、快速排序、归并排序和计数排序。详细介绍了每种排序算法的原理、步骤和代码实现,并通过测试数据展示了它们的性能表现。堆排序利用堆的特性进行排序,快速排序通过递归和多种划分方法实现高效排序,归并排序通过分治法将问题分解后再合并,计数排序则通过统计每个元素的出现次数实现非比较排序。最后,文章还对比了这些排序算法在处理一百万个整形数据时的运行时间,帮助读者了解不同算法的优劣。
192 7
|
3月前
|
搜索推荐 算法 C语言
【排序算法】八大排序(上)(c语言实现)(附源码)
本文介绍了四种常见的排序算法:冒泡排序、选择排序、插入排序和希尔排序。通过具体的代码实现和测试数据,详细解释了每种算法的工作原理和性能特点。冒泡排序通过不断交换相邻元素来排序,选择排序通过选择最小元素进行交换,插入排序通过逐步插入元素到已排序部分,而希尔排序则是插入排序的改进版,通过预排序使数据更接近有序,从而提高效率。文章最后总结了这四种算法的空间和时间复杂度,以及它们的稳定性。
153 8
|
4月前
|
搜索推荐
冒泡排序算法
【10月更文挑战第19天】冒泡排序是一种基础的排序算法,虽然在实际应用中可能不是最优的选择,但对于理解排序算法的基本原理和过程具有重要意义。
|
4月前
|
算法 搜索推荐
数据结构与算法学习十一:冒泡排序、选择排序、插入排序
本文介绍了冒泡排序、选择排序和插入排序三种基础排序算法的原理、实现代码和测试结果。
36 0
数据结构与算法学习十一:冒泡排序、选择排序、插入排序
|
4月前
|
搜索推荐 C语言
排序算法--冒泡排序
排序算法--冒泡排序
30 0
|
2天前
|
算法 数据安全/隐私保护 计算机视觉
基于FPGA的图像双线性插值算法verilog实现,包括tb测试文件和MATLAB辅助验证
本项目展示了256×256图像通过双线性插值放大至512×512的效果,无水印展示。使用Matlab 2022a和Vivado 2019.2开发,提供完整代码及详细中文注释、操作视频。核心程序实现图像缩放,并在Matlab中验证效果。双线性插值算法通过FPGA高效实现图像缩放,确保质量。