unity3D技术分享Unity游戏开发经验分享

算法系列之快速排序算法

2021-09-15  本文已影响0人  能不写代码么

快速排序概述


分而治之概述(D&C)


举例理解分而治之


图文理解快速排序

代码理解快速排序

using System.Collections.Generic;
using UnityEngine;

/// <summary>
/// 转载请注明唯一出处 - 简书
/// 简书地址:https://www.jianshu.com/u/ab8f5ab027bd
/// 简书作者:SunnyShao
/// 创作时间:2021年9月15号
/// </summary>
public class QuickSortTest : MonoBehaviour
{
    public List<int> startSortlist;

    private void Awake()
    {
        List<int> resultSortList = QuickSortFun(startSortlist);
        for (int i = 0; i < resultSortList.Count; i++)
        {
            Debug.Log(resultSortList[i]);
        }
    }

    private List<int> QuickSortFun(List<int> sortlist)
    {
        if (sortlist.Count < 2)
            return sortlist;                        //基线条件:为空或只包含一个元素的列表是“有序”的

        int datumNum = sortlist[0];                 //获得基准值,也是递归条件
        List<int> endSortlist = new List<int>();
        List<int> lowList = new List<int>();
        List<int> highList = new List<int>();

        for (int i = 1; i < sortlist.Count; i++)
        {
            if (sortlist[i] <= datumNum)
            {
                lowList.Add(sortlist[i]);           //取得所有小于基准值的元素组成的子列表
            }
            else
            {
                highList.Add(sortlist[i]);          //取得所有大于基准值的元素组成的子列表
            }
        }

        //递归计算两个子列表 直到满足基线条件
        lowList = QuickSortFun(lowList);
        highList = QuickSortFun(highList);

        //组合成最新的列表返回
        for (int i = 0; i < lowList.Count; i++)
        {
            endSortlist.Add(lowList[i]);
        }
        endSortlist.Add(datumNum);
        for (int i = 0; i < highList.Count; i++)
        {
            endSortlist.Add(highList[i]);
        }

        return endSortlist;
    }
}
排序前
排序后

快速排序运行速度


参考

《算法图解》(确实像小说一样有趣的算法书)

上一篇下一篇

猜你喜欢

热点阅读