You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在C#中用switch或if语句根据用户选择调用排序算法

解决排序算法选择的实现问题

首先,我们需要把三种排序算法封装成独立的静态方法,这些方法接收int[]类型的参数(数组是引用类型,方法内的修改会直接作用于原数组)。之后根据用户输入的选项,用switch或if语句判断并调用对应的排序方法,最后输出排序后的结果。

第一步:实现排序算法方法

在Program类中添加以下三个静态方法:

// 堆排序实现
static void HeapSort(int[] arr)
{
    int n = arr.Length;
    // 构建最大堆
    for (int i = n / 2 - 1; i >= 0; i--)
        Heapify(arr, n, i);

    // 逐个取出堆顶元素并调整堆结构
    for (int i = n - 1; i > 0; i--)
    {
        // 将堆顶元素移到数组末尾
        int temp = arr[0];
        arr[0] = arr[i];
        arr[i] = temp;

        // 对剩余元素重新堆化
        Heapify(arr, i, 0);
    }
}

static void Heapify(int[] arr, int n, int i)
{
    int largest = i; // 初始化最大元素为根节点
    int left = 2 * i + 1; // 左子节点索引
    int right = 2 * i + 2; // 右子节点索引

    // 如果左子节点大于根节点,更新最大元素索引
    if (left < n && arr[left] > arr[largest])
        largest = left;

    // 如果右子节点大于当前最大元素,更新最大元素索引
    if (right < n && arr[right] > arr[largest])
        largest = right;

    // 如果最大元素不是根节点,交换并递归堆化受影响的子树
    if (largest != i)
    {
        int swap = arr[i];
        arr[i] = arr[largest];
        arr[largest] = swap;

        Heapify(arr, n, largest);
    }
}

// 冒泡排序实现
static void BubbleSort(int[] arr)
{
    int n = arr.Length;
    for (int i = 0; i < n - 1; i++)
        for (int j = 0; j < n - i - 1; j++)
            if (arr[j] > arr[j + 1])
            {
                // 交换相邻元素
                int temp = arr[j];
                arr[j] = arr[j + 1];
                arr[j + 1] = temp;
            }
}

// 希尔排序实现
static void ShellSort(int[] arr)
{
    int n = arr.Length;
    // 初始步长设为数组长度的一半,逐步减半
    for (int gap = n / 2; gap > 0; gap /= 2)
    {
        // 对每个步长区间执行插入排序
        for (int i = gap; i < n; i++)
        {
            int temp = arr[i];
            int j;
            // 向前比较并移动元素,找到当前元素的正确位置
            for (j = i; j >= gap && arr[j - gap] > temp; j -= gap)
                arr[j] = arr[j - gap];
            arr[j] = temp;
        }
    }
}

第二步:根据用户选择调用排序方法

你可以选择以下两种方式实现判断逻辑,替换原代码中...的位置:

方式一:使用switch语句

// 根据用户输入的选项调用对应排序方法
switch (myOption)
{
    case "1":
        HeapSort(arr);
        Console.WriteLine("堆排序执行完成");
        break;
    case "2":
        BubbleSort(arr);
        Console.WriteLine("冒泡排序执行完成");
        break;
    case "3":
        ShellSort(arr);
        Console.WriteLine("希尔排序执行完成");
        break;
    default:
        Console.WriteLine("输入选项无效,请输入1、2或3");
        return; // 直接返回,不执行后续输出逻辑
}

// 输出排序后的数组
Console.Write("\n排序后的数组为: ");
for (i = 0; i < 10; i++)
{
    Console.Write("{0}  ", arr[i]);
}
Console.Write("\n");
Console.ReadLine(); // 让窗口停留,方便查看结果

方式二:使用if-else语句

// 根据用户输入的选项调用对应排序方法
if (myOption == "1")
{
    HeapSort(arr);
    Console.WriteLine("堆排序执行完成");
}
else if (myOption == "2")
{
    BubbleSort(arr);
    Console.WriteLine("冒泡排序执行完成");
}
else if (myOption == "3")
{
    ShellSort(arr);
    Console.WriteLine("希尔排序执行完成");
}
else
{
    Console.WriteLine("输入选项无效,请输入1、2或3");
    return; // 直接返回,不执行后续输出逻辑
}

// 输出排序后的数组
Console.Write("\n排序后的数组为: ");
for (i = 0; i < 10; i++)
{
    Console.Write("{0}  ", arr[i]);
}
Console.Write("\n");
Console.ReadLine(); // 让窗口停留,方便查看结果

完整代码示例

整合上述代码后,完整的Program类如下:

using System;

namespace ASortAboveTheRest
{
    internal class Program
    {
        static void Main(string[] args)
        {
            MainMenu();
        }

        static void MainMenu()
        {
            Console.Clear();
            Console.WriteLine("Choose a sort algorithm to perform on the Array");
            Console.WriteLine("");
            Console.WriteLine("Option 1: Heap Sort");
            Console.WriteLine("Option 2: Bubble Sort");
            Console.WriteLine("Option 3: Shell Sort");

            Console.WriteLine("Please type: 1, 2, or 3");
            string myOption;
            myOption = Console.ReadLine();
            int[] arr = new int[10];
            int i;
            Console.Write("Input 10 elements in the array :\n");
            for (i = 0; i < 10; i++)
            {
                Console.Write("element - {0} : ", i);
                arr[i] = Convert.ToInt32(Console.ReadLine());
            }

            Console.Write("\nElements in array are: ");
            for (i = 0; i < 10; i++)
            {
                Console.Write("{0}  ", arr[i]);
            }
            Console.Write("\n");

            // 使用switch判断(可替换为if-else版本)
            switch (myOption)
            {
                case "1":
                    HeapSort(arr);
                    Console.WriteLine("堆排序执行完成");
                    break;
                case "2":
                    BubbleSort(arr);
                    Console.WriteLine("冒泡排序执行完成");
                    break;
                case "3":
                    ShellSort(arr);
                    Console.WriteLine("希尔排序执行完成");
                    break;
                default:
                    Console.WriteLine("输入选项无效,请输入1、2或3");
                    return;
            }

            // 输出排序结果
            Console.Write("\n排序后的数组为: ");
            for (i = 0; i < 10; i++)
            {
                Console.Write("{0}  ", arr[i]);
            }
            Console.Write("\n");
            Console.ReadLine();
        }

        static void HeapSort(int[] arr)
        {
            int n = arr.Length;
            for (int i = n / 2 - 1; i >= 0; i--)
                Heapify(arr, n, i);

            for (int i = n - 1; i > 0; i--)
            {
                int temp = arr[0];
                arr[0] = arr[i];
                arr[i] = temp;

                Heapify(arr, i, 0);
            }
        }

        static void Heapify(int[] arr, int n, int i)
        {
            int largest = i;
            int left = 2 * i + 1;
            int right = 2 * i + 2;

            if (left < n && arr[left] > arr[largest])
                largest = left;

            if (right < n && arr[right] > arr[largest])
                largest = right;

            if (largest != i)
            {
                int swap = arr[i];
                arr[i] = arr[largest];
                arr[largest] = swap;

                Heapify(arr, n, largest);
            }
        }

        static void BubbleSort(int[] arr)
        {
            int n = arr.Length;
            for (int i = 0; i < n - 1; i++)
                for (int j = 0; j < n - i - 1; j++)
                    if (arr[j] > arr[j + 1])
                    {
                        int temp = arr[j];
                        arr[j] = arr[j + 1];
                        arr[j + 1] = temp;
                    }
        }

        static void ShellSort(int[] arr)
        {
            int n = arr.Length;
            for (int gap = n / 2; gap > 0; gap /= 2)
            {
                for (int i = gap; i < n; i++)
                {
                    int temp = arr[i];
                    int j;
                    for (j = i; j >= gap && arr[j - gap] > temp; j -= gap)
                        arr[j] = arr[j - gap];
                    arr[j] = temp;
                }
            }
        }
    }
}

内容的提问来源于stack exchange,提问作者Thatguy

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.09 18:10:50