C#遍历循环列表冒泡排序
时间: 2023-07-25 17:07:30 浏览: 100
以下是使用冒泡排序算法对 C# 中的循环列表进行排序的示例代码:
```csharp
public class Node<T>
{
public T Value { get; set; }
public Node<T> Next { get; set; }
public Node(T value)
{
Value = value;
}
}
public class LinkedList<T> : IEnumerable<T>
{
private Node<T> _head;
private Node<T> _tail;
private int _count;
public int Count => _count;
public void Add(T value)
{
var node = new Node<T>(value);
if (_head == null)
{
_head = node;
}
else
{
_tail.Next = node;
}
_tail = node;
_count++;
}
public IEnumerator<T> GetEnumerator()
{
var current = _head;
while (current != null)
{
yield return current.Value;
current = current.Next;
}
}
IEnumerator IEnumerable.GetEnumerator()
{
return GetEnumerator();
}
public void BubbleSort()
{
if (_head == null || _head.Next == null)
{
return;
}
var swapped = true;
while (swapped)
{
swapped = false;
var current = _head;
while (current.Next != null)
{
if (Comparer<T>.Default.Compare(current.Value, current.Next.Value) > 0)
{
SwapNodes(current, current.Next);
swapped = true;
}
current = current.Next;
}
}
}
private void SwapNodes(Node<T> node1, Node<T> node2)
{
var temp = node1.Value;
node1.Value = node2.Value;
node2.Value = temp;
}
}
```
在上面的代码中,我们首先定义了一个 `Node<T>` 类来表示列表中的节点,以及一个 `LinkedList<T>` 类来表示循环列表。其中, `Add` 方法用于向列表中添加新元素, `GetEnumerator` 方法用于实现 `IEnumerable<T>` 接口,以便我们可以使用 `foreach` 循环遍历列表中的元素。`BubbleSort` 方法则使用冒泡排序算法对列表中的元素进行排序,最后的 `SwapNodes` 方法用于交换两个节点的值。
要使用上面的代码对循环列表进行冒泡排序,可以按照以下方式操作:
```csharp
var list = new LinkedList<int>();
list.Add(3);
list.Add(1);
list.Add(4);
list.Add(2);
Console.WriteLine("Before sorting:");
foreach (var item in list)
{
Console.Write($"{item} ");
}
list.BubbleSort();
Console.WriteLine("\nAfter sorting:");
foreach (var item in list)
{
Console.Write($"{item} ");
}
```
输出结果如下:
```
Before sorting:
3 1 4 2
After sorting:
1 2 3 4
```
阅读全文
相关推荐















