我们还记得每种冒泡排序的算法吗?它的原理就是依次把每一个数与除这个数之外的其他数进行比较,然后进行交换。很显然,这个方法有一个弊病,那就是如果另外有一个数比这个数小,它们立刻交换位置,比如,如果a1与a2进行比较,发现a2比a1小,它们就进行交换,其时,这个时候根本不需要交换,因为我们是需要找到最小的数,放到最前面,而此时a2只是比a1小,我们并不能确定它就是最小的数,它还没有跟后面的a3,a4等等比较呢。应该是找到最小的数的时候,我们再进行交换。选择排序就是这样的一个原理,它和第一种冒泡排序一样,把每一个数与除这个数之外的其他数进行比较,不同的地方是,如果有比它小的,此时并不进行交换,而是把这个比它小的数的下标记到一个min字段中去,然后用这个比较小的数,去与其他的数进行比较,每一次都把比较中最小的数放到min字段中去,最后min字段中的值,就是数组中最小元素的下标了。具体流程图可以参考下面的:

算法与数据结构——排序(三)简单选择排序

       按照每种冒泡排序的方法,上图中标注黄色的步骤(第4,7步)是需要进行交换的,而选择排序却不进行交换,在这个时候,它只是把最小值的下标赋给了字段min,等到找到真正最小的数后,它才进行交换,也就是在第九步才进行交换,这样每次比较它只需要交换一次即可。具体代码参见下面的:

int> sortList)
      {
          int min;
          for (int i = 0; i < sortList.Count; i++)
          {
              min = i;
              for (int j = i + 1; j < sortList.Count; j++)
              {
                  if (sortList[min] > sortList[j])
                  {
                      min = j;
                  }
              }
              if (i != min)
              {
                  int temp = sortList[i];
                  sortList[i] = sortList[min];
                  sortList[min] = temp;
              }
          }
 
          return sortList;
      }

相关文章: