选择排序-直接选择排序

直接选择排序(Straight Select Sorting) 也是一种简单的排序方法,它的基本思想是:

第一次从R[0]~R[n-1]中选取最小值,与R[0]交换,

第二次从R{1}~R[n-1]中选取最小值,与R[1]交换,....,

第i次从R[i-1]~R[n-1]中选取最小值,与R[i-1]交换,.....,

第n-1次从R[n-2]~R[n-1]中选取最小值,与R[n-2]交换,

总共通过n-1次,得到一个按排序码从小到大排列的有序序列.

public static void SelectionSort(int[] sortNum)
{
int temp = 0; int baseNum = 0; //第一层循环一共进行了n-1遍历 for (var i = 0; i < sortNum.Length - 1; i++) { //设定一下基准值,每次遍历开始都设置为第一个 //例如:第一次遍历基准为sortNum[0],第二次为sortNum[1] ... baseNum = sortNum[i]; //第二层循环,遍历每一项从中找到最小的,放在最前面 for (var j = i; j < sortNum.Length - 1; j++) { //如果基准值大于该项,就进行交换 if (baseNum > sortNum[j + 1]) { //交换大小值 temp = sortNum[j + 1]; sortNum[j + 1] = sortNum[i]; sortNum[i] = temp; //重新设定基准值为小值 baseNum = temp; } } } }

 别人的实现,上面的是通过直接记录最小值,也可以通过记录下标的方式

 static List<int> SelectionSort(List<int> list)
 {
    //要遍历的次数
    for (int i = 0; i < list.Count - 1; i++)
    {
        //假设tempIndex的下标的值最小
        int tempIndex = i;

        for (int j = i + 1; j < list.Count; j++)
        {
            //如果tempIndex下标的值大于j下标的值,则记录较小值下标j
            if (list[tempIndex] > list[j])
                tempIndex = j;
        }

        //最后将假想最小值跟真的最小值进行交换
        var tempData = list[tempIndex];
        list[tempIndex] = list[i];
        list[i] = tempData;
     }
      return list;
 }

 

posted @ 2016-03-15 11:16  奋斗的大橙子  阅读(284)  评论(0编辑  收藏  举报