代码改变世界

排序:选择排序

2013-03-03 21:02  gitenius  阅读(234)  评论(0)    收藏  举报

选择排序基本概念:每一趟从待排序的数据元素中选出最小的一个,顺序放在已排好序的数列的最后,直到全部待排序的数据元素排完。

一:时间复杂度

原序列:
20 97 85 20 16 90 74 47 89
排序中:
第1次排序: 16  97  85  20  20  90  74  47  89 
第2次排序: 16  20  85  97  20  90  74  47  89 
第3次排序: 16  20  20  97  85  90  74  47  89 
第4次排序: 16  20  20  47  85  90  74  97  89 
第5次排序: 16  20  20  47  74  90  85  97  89 
第6次排序: 16  20  20  47  74  85  90  97  89 
第7次排序: 16  20  20  47  74  85  89  97  90 
第8次排序: 16  20  20  47  74  85  89  90  97 
第9次排序: 16  20  20  47  74  85  89  90  97
共有N个元素的序列,经过第M(M<N)次排序后,有N-M个待排元素。
算法复杂度为:O(n*2)。

二:算法稳定性

 选择排序不具有稳定性。 

原序列:
20  97 85 20 16 90 74 47 89 
排序中:
 16  97  85  20  20  90  74  47  89 
 16  20  85  97  20  90  74  47  89 
 16  20  20  97  85  90  74  47  89 
 16  20  20  47  85  90  74  97  89 
 16  20 20  47  74  90  85  97  89 
 16  20 20  47  74  85  90  97  89 
 16  20  20  47  74  85  89  97  90 
 16  20  20  47  74  85  89  90  97 
 16  20  20  47  74  85  89  90  97 
排序后:
 16  20  20  47  74  85  89  90  97 

三:示例代码

   1:      public class SelectSortLib
   2:      {
   3:          public int[] Sort(int[] arr)
   4:          {
   5:              for (int outer = 0; outer < arr.Count(); outer++)
   6:              {
   7:                  int min = outer;
   8:   
   9:                  for (int inner = outer + 1; inner < arr.Count(); inner++)
  10:                  {
  11:                      if (arr[min] > arr[inner])
  12:                      {
  13:                          min = inner;
  14:                      }
  15:                  }
  16:   
  17:                  if (min != outer)
  18:                  {
  19:                      int temp = arr[min];
  20:                      arr[min] = arr[outer];
  21:                      arr[outer] = temp;
  22:                  }
  23:              }
  24:              return arr;
  25:          }
  26:      }