首页 > 代码库 > 【算法】 插入排序

【算法】 插入排序

【算法】 插入排序

        /// <summary>        /// 插入排序        /// 思路: 遍历源集合元素插入到新集合中,        /// 插入时从后往前遍历新集合,        /// 比较插入元素与新集合元素大小,以此判断插入的位置        /// </summary>        /// <typeparam name="T"></typeparam>        /// <param name="list">源集合</param>        /// <param name="func">泛型判断函数</param>        /// <returns></returns>        public static List<T> Sort<T>(List<T> list, Func<T, T, bool> func)        {            if (list == null || list.Count <= 1)            {                return list;            }            var result = new List<T>(list.Count) { list[0] };// 排序后的子集合(存入第一个源集合元素)            for (int i = 1; i < list.Count; i++) // 遍历源集合,从索引1开始(0 已经在子集合里)            {                for (int j = i - 1; j >= 0; j--) // 从后遍历子集合                {                    if (func(result[j], list[i])) // 如果子集元素大                    {                        if (j == i - 1)                        {                            result.Add(result[j]); // 扩展子集集合                        }                        result[j + 1] = result[j]; // 调整子集元素位置,使大的元素往后移一位                        result[j] = list[i];                        continue;                    }                    if (j == i - 1) // 如果子集最后(即最大)元素小于源集合元素,则在末尾添加                    {                        result.Add(list[i]);                    }                    break;                }            }            return result;        }

【算法】 插入排序