如何快速查找C#字符串列表中开始升序排序的元素索引?
快速查找列表中升序起始索引的方法
针对你的需求,我们可以通过从后往前遍历检查相邻元素顺序的方式快速定位升序段的起始索引,核心逻辑是找到最后一处破坏升序规则的位置,它的下一个位置就是目标起始点。
实现代码(C#)
var strings = new List<string>() { "qwerqwr", "asdfgsafsdf", "bsdfgsdf", "qweqweqwe", "casdcasdf", "adfasdfasdf", "bsadfgsadfsaf", "cdadadf", "eafdsf", "gasdfasdf" }; int startIndex = 0; // 从倒数第二个元素向前遍历,寻找最后一个破坏升序的位置 for (int i = strings.Count - 2; i >= 0; i--) { // 按ASCII升序规则比较字符串 if (string.Compare(strings[i], strings[i + 1], StringComparison.Ordinal) > 0) { startIndex = i + 1; break; } } Console.WriteLine("升序起始索引:" + startIndex); // 输出结果为5,符合示例
逻辑说明
- 遍历方向:从后往前遍历是因为我们只需要找到最后一处不满足升序的位置,找到后即可停止遍历,无需处理整个列表,效率更高。
- 字符串比较:使用
string.Compare并指定StringComparison.Ordinal,确保严格按照ASCII码值进行升序比较,符合题目要求的ASC排序规则。 - 边界处理:如果列表长度小于2,或者整个列表本身就是升序的,
startIndex会保持为0,符合预期逻辑。
内容的提问来源于stack exchange,提问作者Liryk
相关产品推荐
相关产品推荐

