C#基础:枚举、数组、类型、函数等解析
- 作者: 五速梦信息网
- 时间: 2026年04月20日 04:36
arr[i+1]){
int tmp = arr[i];
arr[i] = arr[i+1];
arr[i+1] = tmp;
//每次交换后,isSwap置为true
isSwap = true;
}
}
//如果本轮没有发生交换,说明已经排序好了,即刻退出循环
if(!isSwap)break;
}
return arr;
} int[] arr2 = { 3, 5, 8, 6, 2, 7, 1, 4}; BubbleSort2(arr2); Console.WriteLine(string.Join(“,”, arr2));
>
>
> 习题
>

```csharp
#region 1
static void BubbleSortUp(int[] arr){
for(int n = 0; n < arr.Length; n++){
bool isSwap = false;
for(int i = 0; i < arr.Length - 1 - n; i++){
//大于后面的就换位置,也就是大的放后面
if(arr[i] > arr[i+1]){
int temp = arr[i];
arr[i] = arr[i+1];
arr[i+1] = temp;
isSwap = true;
}
}
if(!isSwap) break;
}
}
static void BubbleSortDown(int[] arr){
for(int n = 0; n < arr.Length; n++){
bool isSwap = false;
for(int i = 0; i < arr.Length - 1 - n; i++){
//小于后面的就换位置,也就是小的放后面
if(arr[i] < arr[i+1]){
int temp = arr[i];
arr[i] = arr[i+1];
arr[i+1] = temp;
isSwap = true;
}
}
if(!isSwap) break;
}
}
int[] arr1 = new int[20];
Random r1 = new Random();
for(int i = 0; i < arr1.Length; i++){
arr1[i] = r1.Next(0, 101);
}
Console.WriteLine("Before Sort:"+string.Join(",", arr1));
BubbleSortUp(arr1);
Console.WriteLine("After Sort Up:"+string.Join(",", arr1));
BubbleSortDown(arr1);
Console.WriteLine("After Sort Down:"+string.Join(",", arr1));
#endregion
#region 2
static void BubbleSort_UpOrDown(int[] arr,bool isUp){
for(int n = 0; n < arr.Length; n++){
bool isSwap = false;
for(int i = 0; i < arr.Length - 1 - n; i++){
if(isUp){
//大于后面的就换位置,也就是大的放后面
if(arr[i] > arr[i+1]){
int temp = arr[i];
arr[i] = arr[i+1];
arr[i+1] = temp;
isSwap = true;
}
}
else{
//小于后面的就换位置,也就是小的放后面
if(arr[i] < arr[i+1]){
int temp = arr[i];
arr[i] = arr[i+1];
arr[i+1] = temp;
isSwap = true;
}
}
}
if(!isSwap) break;
}
}
int[] arr2 = new int[20];
Random r2 = new Random();
for(int i = 0; i < arr2.Length; i++){
arr2[i] = r2.Next(0, 101);
}
BubbleSort_UpOrDown(arr2,true);
Console.WriteLine("After Sort Up:"+string.Join(",", arr2));
BubbleSort_UpOrDown(arr2,false);
Console.WriteLine("After Sort Down:"+string.Join(",", arr2));
#endregion
选择排序
步骤:
- 新建中间商
- 每轮依次比较,更新中间商
- 找出极值
- 中间商与目标位置互换位置
- n轮比较 详细步骤:
- 新建一个中间商,索引为0
- 中间商与数组的值比较,从索引0开始向后依次比较,每次比较后更新中间商的索引为较大值(或较小值)的索引,找到极值(MAX/min),把极值与目标位置(arr.Length-n-1)互换位置(如果是升序排列,就把MAX放在末尾)
- 这样比较n轮,每轮比较完重置中间商的索引为0,再继续比较,后续每轮的比较只需i从1遍历到数组长度-n即可(第0个不需要和自己比较,末尾的已经排序完不需要再比较)

// 选择排序
//升序, 中间商:maxIndex,目标位置:arr[arr.Length - 1 - n]
static void SelectionSort(int[] arr){
//n轮
for(int n = 0; n < arr.Length - 1; n++){
int maxIndex = 0;
//用中间商找出每轮的最优元素maxIndex
//只需要从1到arr.Length - n - 1遍历
// 不需要和第0个比较(因为中间商就是索引0),不需要和末尾的元素比较,因为arr[arr.Length - 1 - n]后面的元素在前面n轮已经排好序了
for(int i = 1; i < arr.Length - n; i++){
//更新中间商的索引为较大值的索引
if(arr[i] > arr[maxIndex]){
maxIndex = i;
}
}
//交换极值和目标位置(末尾)的元素
//交换条件:中间商不是目标位置
if(maxIndex!= arr.Length - 1 - n){
int tmp = arr[arr.Length - 1 - n];
arr[arr.Length - 1 - n] = arr[maxIndex];
arr[maxIndex] = tmp;
}
}
}
int[] arr = {5, 3, 8, 6, 2, 7, 1, 4};
SelectionSort(arr);
Console.WriteLine(string.Join(" ", arr));
>
>
> 习题
>

static void SelectionSort(int[] arr,bool isUp){
for(int n = 0; n < arr.Length - 1; n++){
int bestIndex = 0;
for(int i = 1; i < arr.Length - n; i++){
if(isUp){
if(arr[i] > arr[bestIndex]){
bestIndex = i;
}
}else{
if(arr[i] < arr[bestIndex]){
bestIndex = i;
}
}
}
if(bestIndex!=arr.Length-n-1){
int temp = arr[arr.Length-n-1];
arr[arr.Length-n-1] = arr[bestIndex];
arr[bestIndex] = temp;
}
}
}
int[] arr = new int[20];
Random r = new Random();
for (int i = 0; i < arr.Length; i++)
{
arr[i] = r.Next(0, 101);
}
Console.WriteLine("Before Sort:"+string.Join(",",arr));
SelectionSort(arr,true);
Console.WriteLine("After Sort Up:"+string.Join(",",arr));
SelectionSort(arr,false);
Console.WriteLine("After Sort Down:"+string.Join(",",arr));
- 上一篇: C#多线程编程精要:从用户线程到线程池的效能进化论
- 下一篇: C#基础之线程安全集合讲解
相关文章
-
C#多线程编程精要:从用户线程到线程池的效能进化论
C#多线程编程精要:从用户线程到线程池的效能进化论
- 互联网
- 2026年04月20日
-
C# 多项目打包时如何将项目引用转为包依赖
C# 多项目打包时如何将项目引用转为包依赖
- 互联网
- 2026年04月20日
-
C# Socket编程模型
C# Socket编程模型
- 互联网
- 2026年04月20日
-
C#基础之线程安全集合讲解
C#基础之线程安全集合讲解
- 互联网
- 2026年04月20日
-
c#开发完整的Socks5代理客户端与服务端——客户端(已完结)
c#开发完整的Socks5代理客户端与服务端——客户端(已完结)
- 互联网
- 2026年04月20日
-
C#实现MCP Client 与 LLM 连接,抓取网页内容功能!
C#实现MCP Client 与 LLM 连接,抓取网页内容功能!
- 互联网
- 2026年04月20日





