Unity学习之C#___排序算法(简单选择排序、插入排序、冒泡排序和快速排序)

本文介绍了排序算法的基本概念,包括关键码和稳定排序的定义。详细讲解了直接插入排序、简单选择排序、冒泡排序和快速排序四种算法,其中快速排序效率较高。并提供了每种排序算法的代码实现,以及对1000个数进行排序的性能测试。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

排序是在编程过程中会经常遇到,并且十分重要,在了解排序算法前,先了解下排序的基本概念

排序项:作为排序依据的数据称为排序项,也称为记录的关键码(Keyword)

* 关键码(关键码分为两种)
* 主关键码 (Primary Keyword)  如果关键码是主关键码 排序结果是唯一的
* 次关键码(Secondary Keyword) 如果关键码是次关键码 则排序结果不唯一
判断排序方法是不是稳定排序方法

如果使用某个排序方法对任意的记录序列按关键码进行排序,相同的关键码值的记录之间的位置关系与排列前一致,则排序方法是稳定的;如果不一致,则排序方法是不稳定的。

例如下面的一队数据

主关键码就是 姓名的ASCALL码值,次关键码就是 分数
如果一个排序方法以次关键码(分数)进行从大到小排序,如果每一次排序结果的 a,b前后位置都没有发生改变,那么这个方式就是稳定方法,但是如果有一次a,b位置发生改变,那么这个方法就是不稳定方法,
在这里插入图片描述
四种排序算法

一、直接插入排序(稳定排序方法)

这里我画了一个图有点抽象,看文字,辅助理解
在这里插入图片描述
排序思路:从第二个元素开始遍历,让当前的元素(a)和前面的所有的元素(b)进行比较,如果前面的元素(b)大于当前元素(a)就把(b)向后移动一位下标,如果前面的元素(b)小于当前元素(a),那么就把当前元素(a)存储(b)下标+1的位置。遍历完后如果所有的(b)都大于当前元素(a)那么就把(a)存入第一个元素的位置。
代码

/// <summary>
        /// 直接插入算法 稳定排序
        /// </summary>
        /// <param name="array"></param>
        static void InsetSort(int[] array)
        {
            //首先从第二个元素开始遍历
            for (int i = 1; i < array.Length; i++)
            {
                int value = array[i];
                bool isMin = true;
                //让 i 下标前的全部数据和 i下标数据进行比较
                for (int j = i-1; j>=0 ; j--)
                {
                    if(array[j]>value)//只要比i下标数据大就向后移一位下标,
                    {
                        array[j + 1] = array[j];
                    }
                    else//如果比i下标数据小或者相等,那么就把i下标数据赋值到他后面
                    {
                        array[j+1] = value;
                        isMin = false;
                        break;//这里需要跳出循环,因为前面的值都是比i下标数据小
        
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值