这篇文章介绍了C#实现选择排序的方法,文中通过示例代码介绍的非常详细。对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
选择排序是一种低效的排序算法,大致过程是:遍历数组的每一个元素,先假设0号位置上的元素是最小的,并把0号索引赋值给一个表示最小元素索引的变量,比如说是smallest,再遍历0号位置以后的元素,一旦发现有比0号位置元素更小的元素,就把该元素的索引赋值给smallest,继续遍历,最终把0号位置以后最小元素的索引赋值给了smallest变量,再把0号位置和smallest位置上的元素互换,这样,在0号位置上放上了最小元素。接着,在1号位置放上倒数第二小的元素,在2号位置放上倒数第三小的元素......以此类推,最终得到一个升序排列的数组。由于是依次循环遍历数组元素,个人更愿意把选择排序理解成线性排序。
自定义一个类,里面维护着一个int[]类型数组,通过构造函数定义数组长度并初始化,并提供了打印和选择排序的相关方法。
public class MyArray
{
private static int[] arr;
private static Random r = new Random();
public MyArray(int size)
{
arr = new int[size];
for (int i = 0; i < size; i++)
{
arr[i] = r.Next(1, 100);
}
}
//选择排序算法
public void Sort()
{
int smallest; //最小元素的索引
//最后一个索引位置不需要遍历,因为在代码段的内部循环中包含了对最后一个索引位置的处理
for (int i = 0; i < arr.Length - 1; i++)
{
//把当前遍历的元素的索引赋值给smallest,即假设当前遍历的数组元素为最小元素
smallest = i;
//遍历当前遍历元素后面的所有元素
//获取最小元素的索引
for (int index = i + 1; index < arr.Length; index++)
{
if (arr[index] < arr[smallest])
{
smallest = index;
}
}
//把当前遍历元素和最小元素交换位置
Swap(i, smallest);
//每次排完序打印
Print();
}
}
//交换2个位置上的元素
public void Swap(int first, int second)
{
int temp = arr[first];
arr[first] = arr[second];
arr[second] = temp;
}
//打印数组元素
public void Print()
{
foreach (var item in arr)
{
Console.Write(item + " ");
}
Console.WriteLine("\n");
}
}
客户端调用。
class Program
{
static void Main(string[] args)
{
MyArray myArray = new MyArray(8);
Console.Write("排序前: ");
myArray.Print();
Console.WriteLine("排序后: ");
myArray.Sort();
Console.ReadKey();
}
}
可见,对选择排序来说,外部循环进行了n-1次迭代,内部循环第一次进行了n-1迭代,第二次进行了n-2次迭代……以时间复杂度来说,忽略小项和常数项,选择排序基本上是一个平方阶,写成O(n²)。
到此这篇关于C#实现选择排序的文章就介绍到这了。希望对大家的学习有所帮助,也希望大家多多支持得得之家。
本文标题为:C#实现选择排序
基础教程推荐
- ZooKeeper的安装及部署教程 2023-01-22
- C#控制台实现飞行棋小游戏 2023-04-22
- winform把Office转成PDF文件 2023-06-14
- C#类和结构详解 2023-05-30
- linux – 如何在Debian Jessie中安装dotnet core sdk 2023-09-26
- C# List实现行转列的通用方案 2022-11-02
- C# 调用WebService的方法 2023-03-09
- 一个读写csv文件的C#类 2022-11-06
- C# windows语音识别与朗读实例 2023-04-27
- unity实现动态排行榜 2023-04-27