/// <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; } for (int i = 0; i < list.Count; i++) { int maxIndex = i; // 最大元素索引 T minT = list[i]; // 最大元素 for (int j = i + 1; j < list.Count; j++) { if (func(minT, list[j])) // 判断是否是最大元素 { maxIndex = j; // 缓存最大元素 minT = list[j]; } } if (maxIndex != i) // 将最大元素与遍历的元素替换位置 { list[maxIndex] = list[i]; list[i] = minT; } } return list; }
时间: 2024-11-16 09:33:39