【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;
                }
            }
        }
    }
}

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

  • 6
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

showswoller

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

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

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

打赏作者

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

抵扣说明:

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

余额充值