C# 语言 集合排序的多种方式

C#阿木 发布于 4 天前 4 次阅读


C 集合排序的多种方式详解

在C编程中,集合排序是一个常见且重要的操作。无论是数组、列表还是其他类型的集合,排序都是数据处理的基础。C提供了多种内置的排序方法,包括简单的比较器、LINQ查询以及自定义排序算法。本文将详细介绍C中集合排序的多种方式,帮助开发者根据不同的需求选择合适的排序方法。

1. 使用Array类的Sort方法

在C中,对于数组类型的集合,可以使用`Array.Sort`方法进行排序。这个方法接受一个比较器作为参数,用于定义排序的规则。

csharp
using System;

class Program
{
static void Main()
{
int[] numbers = { 3, 1, 4, 1, 5, 9, 2, 6, 5, 3, 5 };
Array.Sort(numbers);
Console.WriteLine("Sorted numbers:");
foreach (int number in numbers)
{
Console.Write(number + " ");
}
}
}

2. 使用List的Sort方法

对于`List`类型的集合,可以使用`Sort`方法进行排序。这个方法同样接受一个比较器。

csharp
using System;
using System.Collections.Generic;

class Program
{
static void Main()
{
List numbers = new List { 3, 1, 4, 1, 5, 9, 2, 6, 5, 3, 5 };
numbers.Sort();
Console.WriteLine("Sorted numbers:");
foreach (int number in numbers)
{
Console.Write(number + " ");
}
}
}

3. 使用LINQ进行排序

LINQ(Language Integrated Query)是C中的一种强大的查询工具,它可以用来对集合进行排序。使用LINQ进行排序非常简单,只需使用`OrderBy`或`OrderByDescending`方法。

csharp
using System;
using System.Collections.Generic;
using System.Linq;

class Program
{
static void Main()
{
List numbers = new List { 3, 1, 4, 1, 5, 9, 2, 6, 5, 3, 5 };
var sortedNumbers = numbers.OrderBy(n => n).ToList();
Console.WriteLine("Sorted numbers using LINQ:");
foreach (int number in sortedNumbers)
{
Console.Write(number + " ");
}
}
}

4. 使用自定义比较器

在C中,你可以创建自定义的比较器来实现复杂的排序逻辑。这通常通过实现`IComparer`接口来完成。

csharp
using System;
using System.Collections.Generic;

class Program
{
static void Main()
{
List people = new List
{
new Person { Name = "Alice", Age = 30 },
new Person { Name = "Bob", Age = 25 },
new Person { Name = "Charlie", Age = 35 }
};

people.Sort((p1, p2) => p1.Age.CompareTo(p2.Age));
Console.WriteLine("Sorted people by age:");
foreach (Person person in people)
{
Console.WriteLine($"{person.Name} - {person.Age}");
}
}
}

class Person
{
public string Name { get; set; }
public int Age { get; set; }
}

5. 使用Parallel LINQ (PLINQ)

Parallel LINQ是LINQ的一个扩展,它可以在多核处理器上并行执行查询,从而提高排序操作的效率。

csharp
using System;
using System.Collections.Generic;
using System.Linq;

class Program
{
static void Main()
{
List numbers = new List { 3, 1, 4, 1, 5, 9, 2, 6, 5, 3, 5 };
var sortedNumbers = numbers.AsParallel().OrderBy(n => n).ToList();
Console.WriteLine("Sorted numbers using PLINQ:");
foreach (int number in sortedNumbers)
{
Console.Write(number + " ");
}
}
}

6. 使用Bubble Sort、Selection Sort和Insertion Sort

对于教学或小型数据集,你可以实现自己的排序算法,如冒泡排序、选择排序和插入排序。

csharp
using System;

class Program
{
static void Main()
{
int[] numbers = { 3, 1, 4, 1, 5, 9, 2, 6, 5, 3, 5 };
BubbleSort(numbers);
Console.WriteLine("Sorted numbers using Bubble Sort:");
foreach (int number in numbers)
{
Console.Write(number + " ");
}
}

static void BubbleSort(int[] arr)
{
bool swapped;
do
{
swapped = false;
for (int i = 0; i arr[i + 1])
{
int temp = arr[i];
arr[i] = arr[i + 1];
arr[i + 1] = temp;
swapped = true;
}
}
} while (swapped);
}
}

总结

C提供了多种排序方法,从简单的`Array.Sort`和`List.Sort`到强大的LINQ和自定义比较器,再到并行处理和传统的排序算法。选择合适的排序方法取决于你的具体需求和性能考虑。你应该能够根据不同的场景选择最合适的排序策略。