环球动态: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#实现选择排序的文章就介绍到这了。希望对大家的学习有所帮助,也希望大家多多支持脚本之家。
X 关闭
X 关闭
- 1亚马逊开始大规模推广掌纹支付技术 顾客可使用“挥手付”结账
- 2现代和起亚上半年出口20万辆新能源汽车同比增长30.6%
- 3如何让居民5分钟使用到各种设施?沙特“线性城市”来了
- 4AMD实现连续8个季度的增长 季度营收首次突破60亿美元利润更是翻倍
- 5转转集团发布2022年二季度手机行情报告:二手市场“飘香”
- 6充电宝100Wh等于多少毫安?铁路旅客禁止、限制携带和托运物品目录
- 7好消息!京东与腾讯续签三年战略合作协议 加强技术创新与供应链服务
- 8名创优品拟通过香港IPO全球发售4100万股 全球发售所得款项有什么用处?
- 9亚马逊云科技成立量子网络中心致力解决量子计算领域的挑战
- 10京东绿色建材线上平台上线 新增用户70%来自下沉市场