Visual Studio中的排序方法

目录

一、冒泡排序

1.介绍

2.使用模板

3.示例

4.注意事项

二、选择排序

1.介绍

2.使用模板

3.示例

4.注意事项

三、快速排序

1.介绍

2.使用模板

3.示例

4.注意事项

四、C#内置的排序方法

1.介绍

2.使用模板

3.注意事项

五、简单总结


一、冒泡排序

1.介绍

冒泡排序是一种简单的排序算法,通过相邻元素的比较与交换将最大(或最小)的元素逐步"冒泡"到数组的末端。重复此过程直到整个数组有序。

2.使用模板

3.示例

对数组 [3, 1, 4, 1, 5] 进行冒泡排序:

  1. 第1轮:比较相邻元素,交换 31[1, 3, 1, 4, 5]
  2. 第2轮:交换 31[1, 1, 3, 4, 5]
  3. 第3轮:无交换,提前退出。

int[] arr = { 3, 1, 4, 1, 5 };

BubbleSort(arr);

Console.WriteLine("排序后数组:" + string.Join(", ", arr)); // 输出:1,1,3,4,5

4.注意事项

  • 优化标志 :添加 swapped 标志可避免不必要的循环,提升效率。
  • 数组越界 :内循环条件需为 j < n - 1 - i,避免访问 array[j+1] 时越界。
  • 稳定性 :冒泡排序是稳定排序(相同元素相对位置不变)。

二、选择排序

1.介绍

选择排序通过每次从未排序部分选择最小(或最大)元素,将其放到已排序部分的末尾。重复此过程直到整个数组有序。

2.使用模板

3.示例

对数组 [3, 1, 4, 1, 5] 进行选择排序:

第1轮:找到最小元素 1(索引1),交换到位置0 → [1, 3, 4, 1, 5]

第2轮:找到最小元素 1(索引3),交换到位置1 → [1, 1, 4, 3, 5]

第3轮:找到最小元素 3(索引3),交换到位置2 → [1, 1, 3, 4, 5]

int[] arr = { 3, 1, 4, 1, 5 };

SelectionSort(arr);

Console.WriteLine("排序后数组:" + string.Join(", ", arr)); // 输出:1, 1, 3, 4, 5

4.注意事项

  • 交换次数少 :选择排序交换次数固定为 n-1 次,优于冒泡排序。
  • 不稳定性 :选择排序是不稳定排序 (相同元素可能交换位置,例如 [2, 2, 1] 排序后变为 [1, 2, 2],但原顺序可能改变)。
  • 性能 :时间复杂度始终为 O(n²),无优化空间。

三、快速排序

1.介绍

通过一趟排序将数组分为两部分,左部分小于基准值,右部分大于基准值,递归地对两部分进行排序。

2.使用模板

3.示例

int[] arr = { 10, 7, 8, 9, 1, 5 };

QuickSort(arr);

Console.WriteLine("排序后数组:" + string.Join(", ", arr)); // 输出:1, 5, 7, 8, 9, 10

4.注意事项

  • 基准值的选择会影响性能(如随机选择基准值可避免最坏情况)。
  • 适用于大规模数据,是实际应用中常用的排序算法。

四、C#内置的排序方法

1.介绍

.NET框架提供了Array.Sort()List<T>.Sort()方法,底层实现为快速排序 (对于值类型)或稳定排序(对于引用类型)。

2.使用模板

3.注意事项

  • 内置方法经过优化,性能优于手动实现的简单排序算法。
  • 对于自定义类型,需实现IComparable<T>接口或提供IComparer<T>比较器。

五、简单总结

|--------|--------------|----------|
| 排序算法 | 适用场景 | 稳定性 |
| 冒泡排序 | 小规模数据、基本有序数据 | 稳定 |
| 选择排序 | 小规模数据 | 不稳定 |
| 快速排序 | 大规模数据 | 不稳定 |
| C#内置排序 | 大多数实际应用场景 | 根据实际情况判断 |

相关推荐
如何原谅奋力过但无声2 分钟前
【灵神高频面试题合集04-05】二分查找
数据结构·python·算法·leetcode
我不是懒洋洋5 分钟前
【数据结构】排序算法(直接插入排序、希尔排序、选择排序、堆排序、冒泡排序、快速排序、归并排序、计数排序)
c语言·数据结构·c++·经验分享·算法·排序算法
辛苦才能9 分钟前
数据结构--排序--插入排序(C语言,重点排序面试和比赛都会考察)
c语言·数据结构·面试
ErizJ9 分钟前
Kafka | 学习笔记
笔记·学习·kafka
ZC跨境爬虫11 分钟前
跟着 MDN 学 HTML day_10:(超链接核心语法+路径规则)
前端·css·笔记·ui·html·edge浏览器
东京老树根16 分钟前
SAP学习笔记 - BTP CAP开发02 - Assosication,Composition,?$expand=books
笔记·学习
ZC跨境爬虫9 小时前
跟着 MDN 学 HTML day_9:(信件语义标记)
前端·css·笔记·ui·html
yngsqq12 小时前
平面图环 内轮廓
c#
OBiO201312 小时前
Cell | 突破AAV载体容量限制!路中华/姜玉武/刘太安团队开发AAVLINK系统实现大基因递送
笔记
智者知已应修善业13 小时前
【51单片机2个按键控制流水灯运行与暂停】2023-9-6
c++·经验分享·笔记·算法·51单片机