下面是详细讲解“C#实现选择排序”的完整攻略。
选择排序的算法原理
选择排序(Selection Sort)是一种简单直观的排序算法。其算法思想是将待排序序列分成已排序和未排序两个部分,每次从未排序的元素中选择最小(或最大)的元素,放到已排序的序列末尾。重复这个过程,直到所有元素都排序完毕。
C#实现选择排序的步骤
实现选择排序的过程有以下几个步骤:
- 定义待排序的数组,确定数组的长度,使用循环语句取出数组中的每个元素;
- 再使用一个循环语句,在未排序部分找到最小的元素,并记录其下标;
- 通过交换元素的方式,将已排序部分的最后一个元素和未排序部分中的最小元素位置互换;
- 重复第2、3步,直到未排序的元素为 0 个,整个数组排序完毕。
下面我们来看一下其中的代码实现。
C#代码实现
public static void SelectionSort(int[] arr)
{
int len = arr.Length;
for (int i = 0; i < len - 1; i++)
{
int minIndex = i;
for (int j = i + 1; j < len; j++)
{
if (arr[j] < arr[minIndex])
{
minIndex = j;
}
}
if (minIndex != i)
{
int temp = arr[i];
arr[i] = arr[minIndex];
arr[minIndex] = temp;
}
}
}
代码解释:
- 定义一个静态方法
SelectionSort
来对整型数组进行排序; - 拿到待排序数组的长度,使用双重循环,外层的循环来确定已排序部分的长度,内层循环则是用来找到最小的元素;
- 如果找到了比当前下标元素值更小的元素,通过记录 minIndex 的方式来保存这个元素的下标;
- 判断minIndex 是否等于已排序的边界,如果不等,则通过另一个变量 temp 来交换两个位置的元素值。
下面演示一下算法执行过程:
例如,我们要对数组 [2, 6, 4, 3, 1, 5, 8, 9, 7]
进行排序。
- 在第一次循环中,选择最小的元素
1
,将其与第一个元素2
互换位置,数组变为[1, 6, 4, 3, 2, 5, 8, 9, 7]
; - 第二次循环中,选择最小的元素
2
,将其与第二个元素6
互换位置,数组变为[1, 2, 4, 3, 6, 5, 8, 9, 7]
; - 依次类推,直到排序完成,最终结果为
[1, 2, 3, 4, 5, 6, 7, 8, 9]
。
示例说明
下面提供两个示例,分别是排序一个长度为 10 的数组和一个长度为 100 的数组。
示例1:排序一个长度为 10 的数组
int[] arr = new int[] { 2, 6, 4, 3, 1, 5, 8, 9, 7, 10 };
SelectionSort(arr);
Console.WriteLine("排序后的数组为:");
foreach (var item in arr)
{
Console.Write(item + " ");
}
输出结果为:
排序后的数组为:
1 2 3 4 5 6 7 8 9 10
示例2:排序一个长度为 100 的数组
int[] arr = new int[100];
Random rand = new Random();
for (int i = 0; i < arr.Length; i++)
{
arr[i] = rand.Next(0, 1000);
}
Console.WriteLine("排序前的数组为:");
foreach (var item in arr)
{
Console.Write(item + " ");
}
SelectionSort(arr);
Console.WriteLine("\n排序后的数组为:");
foreach (var item in arr)
{
Console.Write(item + " ");
}
输出结果为:
排序前的数组为:
491 876 883 502 650 350 727 551 4 935 790 362 348 997 505 372 963 266 529 345 796 125 23 250 544 819 454 902 941 73 776 485 453 188 742 43 613 464 708 425 270 888 971 218 107 414 4 856 672 284 49 515 535 150 304 817 863 878 593 996 546 826 571 102 303 520 758 206 325 76 842 442 606 13 64 103 237 703 778 348 997 779 428 125 192 646 485 551 464 789 260 222 425 427 26 571 758 827 441 516 476 927 895 558 410 619 209 377 496 785 473
排序后的数组为:
4 4 13 23 26 43 49 64 73 76 102 103 107 125 125 150 188 192 206 209 218 222 237 250 260 266 270 284 303 304 325 345 348 348 350 362 372 377 410 414 425 425 427 428 441 442 453 454 464 464 473 476 485 485 496 502 515 516 529 535 544 546 551 551 558 571 571 593 606 613 619 646 650 672 703 708 727 742 758 758 776 778 779 785 789 790 796 817 819 826 827 842 856 863 876 878 883 888 895 902 927 935 941 963 971 996 997 997
总结
以上就是C#实现选择排序的详细攻略,选择排序虽然简单直观,但其时间复杂度为O(n^2),在面对大量数据时性能不佳,不适用于大规模的排序应用。如果需要面对大数据量的排序,应该优先选择更快速、更优化的算法。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:C#实现选择排序 - Python技术站