c#实现选择排序的示例

作者:欧气柠檬 时间:2021-10-15 00:32:27 

1.工作原理(算法思路)

  1. 给定一个待排序数组,找到数组中最小的那个元素

  2. 如果最小元素不是待排序数组的第一个元素,则将其和第一个元素互换

  3. 在剩下的元素中,重复1、2过程,直到排序完成。

2.动图演示

c#实现选择排序的示例

3.C#代码实现

根据原理设计算法:


class Program
{

//选择排序法
 private static void chooseSort(int[] array)
 {
   //第一个for循环:每一次循环完成后得到的当前的最大元素都与第i位做交换
   for (int i = 0; i < array.Length; i++)
   {
     //min为最小元素的索引
     int min = i;

//第二个for循环:将当前的array[j]与array[min]作比较,如果array[j]更小,则替换min的当前索引
     for (int j = i + 1; j < array.Length; j++)
     {
       if (array[min] > array[j])
       {
         min = j;
       }
     }
     //当第二个for循环完成时,array[min]中存储的就是当前最小元素
     //将array[min]与array[i]交换
     int temp = array[i];
     array[i] = array[min];
     array[min] = temp;
   }
 }

//打印输出数组
 private static void printArray(int[] array)
 {
   foreach (int item in array)
   {
     Console.Write(item + "\t");
   }
   Console.WriteLine();
 }

static void Main(string[] args)
 {
   int[] array = new int[10] { 9, 8, 7, 6, 5, 4, 3, 2, 1, 0 };
   printArray(array);
   chooseSort(array);
   printArray(array);
   Console.ReadKey();

}

}

输出结果

c#实现选择排序的示例

4.性能分析

1)复杂度

c#实现选择排序的示例

2)选择排序法特点

  • 执行的比较和交换次数

比较: N*(N-1)/2
交换: N

  • 运行时间与输入无关

在每一次的for循环结束后并不能为下一次的循环提供有效信息。这种性质在某些时候是一种缺陷。在数组大小相同时,当一个几乎已经有序的数组使用选择排序法花费的时间和无序数组所花费的时间是一致的。

  • 数据的移动量最少

交换的次数和数组的大小呈线性关系,其他的排序算法对数据移动量都是线性对数级别或平方级别的。

来源:https://www.cnblogs.com/Lyd1563891920/p/13782257.html

标签:c#,选择,排序
0
投稿

猜你喜欢

  • C#结合AForge实现摄像头录像

    2021-06-28 03:53:51
  • 简述Java中的四种引用类型

    2023-11-29 00:46:56
  • ReentrantLock源码详解--条件锁

    2023-01-01 15:36:22
  • java switch语句使用注意的四大细节

    2022-07-10 10:46:04
  • Java提取2个集合中的相同和不同元素代码示例

    2023-11-28 05:48:41
  • Java Synchronized锁失败案例及解决方案

    2023-10-25 12:33:47
  • JavaCV实战之调用摄像头基础详解

    2022-07-15 02:14:10
  • 老生常谈比较排序之归并排序(递归)

    2022-05-15 11:43:15
  • Lombok中@EqualsAndHashCode注解的使用及说明

    2023-11-30 04:47:05
  • springboot整合@Retryable实现重试功能的示例代码

    2023-11-27 11:08:20
  • 详解java接口基础知识附思维导图

    2023-11-09 10:07:28
  • Java ArrayList源码深入分析

    2023-06-16 16:30:26
  • 通过java反射机制动态调用某方法的总结(推荐)

    2022-11-04 01:38:32
  • Java手写线程池的实现方法

    2023-10-30 12:50:03
  • 2021年最新Redis面试题汇总(3)

    2022-02-27 13:31:22
  • androidQ sd卡权限使用详解

    2021-09-27 17:38:51
  • java.lang.NoClassDefFoundError错误解决办法

    2021-12-29 03:52:27
  • Java基础之Stream流原理与用法详解

    2021-06-07 22:16:05
  • 基于Spring Boot保护Web应用程序

    2022-11-15 19:14:48
  • C#实现读取匿名对象属性值的方法示例总结

    2023-02-02 18:56:03
  • asp之家 软件编程 m.aspxhome.com