c#实现选择排序的示例

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

  1. 给定一个待排序数组,找到数组中最小的那个元素
  2. 如果最小元素不是待排序数组的第一个元素,则将其和第一个元素互换
  3. 在剩下的元素中,重复1、2过程,直到排序完成。

2.动图演示

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();

  }

}

输出结果

4.性能分析

1)复杂度

2)选择排序法特点

  • 执行的比较和交换次数

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

  • 运行时间与输入无关

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

  • 数据的移动量最少

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

以上就是c#实现选择排序的示例的详细内容,更多关于c# 选择排序的资料请关注我们其它相关文章!

(0)

相关推荐

  • C#实现的二维数组排序算法示例

    本文实例讲述了C#实现的二维数组排序算法.分享给大家供大家参考,具体如下: class Order { /// <summary> /// 对二维数组排序 /// </summary> /// <param name="values">排序的二维数组</param> /// <param name="orderColumnsIndexs">排序根据的列的索引号数组</param> /// <

  • C#七大经典排序算法系列(上)

    今天是开篇,得要吹一下算法,算法就好比程序开发中的利剑,所到之处,刀起头落. 针对现实中的排序问题,算法有七把利剑可以助你马道成功. 首先排序分为四种: 交换排序: 包括冒泡排序,快速排序. 选择排序: 包括直接选择排序,堆排序. 插入排序: 包括直接插入排序,希尔排序. 合并排序: 合并排序. 那么今天我们讲的就是交换排序,我们都知道,C#类库提供的排序是快排,为了让今天玩的有意思点, 我们设计算法来跟类库提供的快排较量较量.争取KO对手. 冒泡排序: 首先我们自己来设计一下"冒泡排序&quo

  • C#实现二叉排序树代码实例

    二叉排序树,又称为二叉查找树.它或者是一颗空树,或者是具有下列性质的二叉树: 若它的左子树不为空.则左子树上所有的结点的值均小于跟的结点值 若它的右子树部位空,则右子树的所有结点值均大于它的根结点的值 它的左右子树也分别是二叉排序树 1,排序方便 2,查找方便 3,便于插入和删除 C#链式存储二叉排序树,实现简单的排序,以及查找,具体代码如下: namespace _2_1_3二叉排序树 { /// <summary> /// 结点类 /// </summary> class BS

  • C#实现排序的代码详解

    C#排序案例代码: using System; namespace 排序案例 { class Program { static void Main(string[] args) { //定义随机数列 int a, b, c, d; Random rand = new Random(); int[] intArray = new int[10]; for (int i = 0; i < intArray.Length; i++) { a = rand.Next(1, 100); intArray[

  • C#选择排序法实例分析

    本文实例讲述了C#选择排序法.分享给大家供大家参考.具体如下: public static void SelectSort (int[] list) { for (int i = 0; i < list.Length; i++) { int min = i; for (int j = i + 1; j < list.Length; j++) if(list [j] < list [min]) min = j; if(min ! = i) { int Temp = list [min];

  • C#七大经典排序算法系列(下)

    今天跟大家聊聊最后三种排序: 直接插入排序,希尔排序和归并排序. 直接插入排序: 这种排序其实蛮好理解的,很现实的例子就是俺们斗地主,当我们抓到一手乱牌时,我们就要按照大小梳理扑克,30秒后,扑克梳理完毕,4条3,5条s,哇塞...... 回忆一下,俺们当时是怎么梳理的. 最左一张牌是3,第二张牌是5,第三张牌又是3,赶紧插到第一张牌后面去,第四张牌又是3,大喜,赶紧插到第二张后面去,第五张牌又是3,狂喜,哈哈,一门炮就这样产生了. 怎么样,生活中处处都是算法,早已经融入我们的生活和血液. 下面

  • C#排序算法之快速排序解析

    本文实例为大家分享了C#实现快速排序的具体代码,供大家参考,具体内容如下 代码: /// <summary> /// 排序 /// </summary> /// <param name="array">要排序的数组</param> /// <param name="low">下标开始位置,向右查找</param> /// <param name="high">下标

  • C#实现冒泡排序算法的代码示例

    1.原理:从数组的第一个位置开始两两比较array[index]和array[index+1],如果array[index]大于array[index+1]则交换array[index]和array[index+1]的位置,止到数组结束; 从数组的第一个位置开始,重复上面的动作,止到数组长度减一个位置结束; 从数组的第一个位置开始,重复上面的动作,止到数组长度减二个位置结束; .... 2.时间复杂度:O(N²),进行了(n-1)*(n-2)....=n*(n-1)/2次比较和约比较次数一半的交

  • C#选择法排序实例分析

    本文实例讲述了C#选择法排序实现方法.分享给大家供大家参考.具体实现方法如下: public int[] SelectionSort(int[] arr) { //1. Find min //2. Swap it with first element //3. Repeat starting from secong position onwards. int _min = 0; for (int i = 0; i < arr.Length; i++) { _min = i; for (int j

  • c#实现最简洁的快速排序(你绝对可以看懂)

    前言 算法对于程序员的重要性不言而喻,今天我和大家分享算法中的一个基础算法,快速排序.作为一名程序员,相信大家都不陌生,但是要大家徒手一次性写出来,我估计还是有难度的.那么废话不多少,我先简单减少一下概念. 快速排序算法说明: 原始数组L1,从中任意选择一个基准数F(一般选择第1个),小于F的数据放在F的左边记为数组minList,大于F的数据放在F的右边记为数组maxList.那么 L1=minList+F+maxList 然后对minList和maxList再做这样的操作,直到minList

  • C#排序算法之归并排序

    本文实例为大家分享了C#实现归并排序具体代码,供大家参考,具体内容如下 代码: //归并排序(目标数组,子表的起始位置,子表的终止位置) private static void MergeSortFunction(int[] array, int first, int last) { try { if (first < last) //子表的长度大于1,则进入下面的递归处理 { int mid = (first + last) / 2; //子表划分的位置 MergeSortFunction(a

随机推荐