(C#)插入排序 Insertion Sort

本文介绍了一种经典的排序算法——插入排序,并提供了详细的C#实现代码。通过一个简单的List<int>示例展示了如何逐步对整数列表进行排序。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace Sort
{
    class Insert
    {
        public static void InsertSort(List<int> list)
        {
            int tmp, j;
            for (int i = 1; i < list.Count; ++i)
            {
                if (list[i] < list[i - 1])
                {
                    tmp = list[i];
                    for (j = i - 1; j >= 0 && tmp < list[j]; --j)
                    {
                        list[j + 1] = list[j];
                    }
                    //for (j = i - 1; j >= 0;)
                    //{
                    //    if (tmp < list[j])
                    //    {
                    //        list[j + 1] = list[j];
                    //        --j;
                    //    }
                    //    else
                    //    {
                    //        break;
                    //    }
                    //}
                    list[j + 1] = tmp;
                }
            }
        }
    }
}


 

### C#插入排序算法的实现 以下是基于提供的引用内容以及专业知识所总结的关于如何用 C# 实现插入排序算法的内容。 #### 插入排序的基本原理 插入排序的核心思想是通过构建有序序列,对于未排序的数据,在已排序序列中从后向前扫描,找到相应位置并插入。这种方法类似于我们在日常生活中整理扑克牌的过程[^4]。 #### 非递归版本的插入排序代码示例 下面是一个经典的非递归方式实现的插入排序算法: ```csharp public class SortingAlgorithms { public static void InsertionSort(int[] array) { int n = array.Length; for (int i = 1; i < n; i++) { int key = array[i]; int j = i - 1; // 将大于key的元素向右移动一位 while (j >= 0 && array[j] > key) { array[j + 1] = array[j]; j--; } // 插入当前元素到正确的位置 array[j + 1] = key; } } } ``` 上述代码实现了标准的插入排序逻辑,其中 `array` 是待排序的数组。该方法的时间复杂度为 O(),适合处理较小规模的数据集合[^3]。 #### 使用场景演示 为了验证以上函数的功能,可以编写一个简单的测试程序来展示其效果: ```csharp using System; class Program { static void Main() { int[] numbers = { 9, 5, 1, 8, 3 }; Console.WriteLine("原始数组:"); PrintArray(numbers); SortingAlgorithms.InsertionSort(numbers); Console.WriteLine("\n排序后的数组:"); PrintArray(numbers); } private static void PrintArray(int[] array) { foreach (var item in array) { Console.Write(item + " "); } Console.WriteLine(); } } ``` 运行此程序会先显示未经排序的数组状态,随后执行排序操作并将结果输出至控制台[^2]。 #### 递归版本的插入排序代码示例 除了传统的迭代写法外,还可以采用递归来完成同样的功能。下面是具体的实现方案: ```csharp public class RecursiveSortingAlgorithms { public static void InsertionSortRecursive(int[] array, int length) { if (length <= 1) return; // 对前 n-1 个元素进行排序 InsertionSortRecursive(array, length - 1); // 把最后一个元素放到合适的位置上 int lastElement = array[length - 1]; int indexToCheck = length - 2; while (indexToCheck >= 0 && array[indexToCheck] > lastElement) { array[indexToCheck + 1] = array[indexToCheck]; indexToCheck--; } array[indexToCheck + 1] = lastElement; } } ``` 这种递归形式虽然更简洁易懂,但在性能方面可能不如循环结构高效,尤其是在大规模数据集上的表现较差[^5]。 --- ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值