c#.Net.NetCore面试(三十九)选择排序算法

c#.Net.NetCore面试(三十九)选择排序算法

解决方案goocz2025-05-25 12:09:364A+A-

找到最小就交换,逐一缩小范围圈,最后只剩一个值

我自己的记法:双for循环数组嵌套,主for从0开始,嵌套for从+1开始,判断主数组循环值大于嵌套循环值就互换

  • 找到最小就交换”:每次从未排序部分找到最小的元素后,就将它与当前位置的元素交换。
  • 逐一缩小范围圈”:每完成一次交换,未排序部分的范围就缩小一个元素。
  • 最后只剩一个值”:当只剩下最后一个元素时,排序完成。

核心思想

在未排序的序列中找到最小(或最大)元素,存放到排序序列的起始位置,然后再从剩余未排序元素中继续寻找最小(或最大)元素,放到已排序序列的末尾。通过不断重复这个过程,直到所有元素均排序完毕

选择排序(Selection Sort)是一种简单直观的排序算法。它的工作原理是每一次从待排序的数据元素中选出最小(或最大)的一个元素,存放在序列的起始位置,直到全部待排序的数据元素排完。

C#选择排序算法示例代码:

using System;  
  
class Program  
{  
    static void Main()  
    {  
        // 初始化一个待排序的整数数组  
        int[] numbers = { 4, 2, 9, 6, 23, 12, 34, 0, 1 };  
        // 打印原始数组  
        Console.WriteLine("Original array:");  
        foreach (int number in numbers)  
        {  
            Console.Write(number + " ");  
        }  
        Console.WriteLine();  
        // 调用选择排序函数对数组进行排序  
        SelectionSort(numbers);  
        // 打印排序后的数组  
        Console.WriteLine("Sorted array:");  
        foreach (int number in numbers)  
        {  
            Console.Write(number + " ");  
        }  
        Console.WriteLine();  
    }  
    // 选择排序函数  
    static void SelectionSort(int[] array)  
    {  
        int n = array.Length; // 获取数组长度  
        // 外层循环控制排序的轮数  
        for (int i = 0; i < n - 1; i++)  
        {  
            // 假设当前位置i的元素是最小的  
            int minIndex = i;  
            // 内层循环用于查找未排序部分中的最小元素  
            for (int j = i + 1; j < n; j++)  
            {  
                // 如果找到更小的元素,则更新最小元素的索引  
                if (array[j] < array[minIndex])  
                {  
                    minIndex = j;  
                }  
            }  
            // 如果最小元素不是当前位置的元素,则交换它们  
            if (minIndex != i)  
            {  
                int temp = array[i];  
                array[i] = array[minIndex];  
                array[minIndex] = temp;  
            }  
        }  
    }  
}

代码解析:

  1. Main 方法初始化了一个待排序的整数数组 numbers,并打印出原始数组。
  2. 调用 SelectionSort 方法对数组进行排序。
  3. SelectionSort 方法首先获取数组的长度 n,然后开始外层循环。外层循环从数组的第一个元素开始,直到倒数第二个元素(因为最后一个元素在前面的循环中已经被放置到正确的位置)。
  4. 在外层循环中,变量 minIndex 被初始化为当前外层循环的索引 i。这个变量用于存储当前未排序部分中最小元素的索引。
  5. 内层循环从 i + 1 开始,遍历剩余的未排序部分,寻找最小元素的索引。如果找到比当前 minIndex 所指向的元素还小的元素,就更新 minIndex。
  6. 内层循环结束后,如果 minIndex 不是 i(即最小元素不在当前位置),则交换位置 i 和 minIndex 上的元素。这样,当前位置 i 就有了未排序部分中的最小元素。
  7. 外层循环继续,直到整个数组都被排序。
  8. 最后,Main 方法打印出排序后的数组,以验证排序是否成功。

选择排序的时间复杂度是 O(n^2),其中 n 是数组的长度。这是因为对于每个元素,都需要遍历剩余未排序的元素来找到最小(或最大)的元素。选择排序是原地排序算法,只需要常量级的额外空间。然而,由于其时间复杂度较高,选择排序通常不用于处理大型数据集。

点击这里复制本文地址 以上内容由goocz整理呈现,请务必在转载分享时注明本文地址!如对内容有疑问,请联系我们,谢谢!

果子教程网 © All Rights Reserved.  蜀ICP备2024111239号-5