选择排序

 

数据结构 数组
最差时间复杂度 O(n^2)
最优时间复杂度 O (n^2)
平均时间复杂度 O(n^2)
空间复杂度 O(1)
排序方式 in-place
稳定性 不稳定
比较次数 n*(n-1)/2

 

 

 

 

 

 

 

 

 

 

步骤:

首先在未排序序列中找到最小(大)元素,存放到排序序列的起始位置

再从剩余未排序元素中继续寻找最小(大)元素,然后放到已排序序列的末尾。

重复第二步,直到所有元素均排序完毕。

百度了一张选择排序的图解。

    public class SelectionSort : SortBase
    {
        public override void Sort()
        {
            int SumCount = 0;
            int len = arr.Length;
            int iCount = 0;
            for (int i = 0; i < len - 1; i++)
            {
                iCount++;
                int jCount = 0;
                //获取arr[n](外层第n轮)后的最小值
                int min = i;
                for (int j = i + 1; j < len; j++)
                {
                    SumCount++;
                    jCount++;
                    if (arr[j] < arr[min])
                    {
                        min = j;
                    }
                }
                //arr[n]和最小值交换
                if (i != min)
                {
                    int temp = arr[min];
                    arr[min] = arr[i];
                    arr[i] = temp;
                }
                Console.WriteLine($"i:{iCount} j:{jCount}");
                base.output(arr);
            }
            Console.WriteLine($"SumCount:{SumCount}");

        }
        

        public override void Sort2()
        {
int len = arr2.Length; int iCount = 0; for (int i = len - 1; i > 0; i--) { iCount++; int jCount = 0; int min = i; for (int j = i - 1; j >= 0; j--) { jCount++; if (arr2[j] > arr2[min]) { min = j; } } if (i != min) { int temp = arr2[min]; arr2[min] = arr2[i]; arr2[i] = temp; } Console.WriteLine($"i:{iCount} j:{jCount}"); base.output(arr2); } } }

 

  结果:

posted @ 2019-01-07 00:02  luanxm  阅读(201)  评论(0编辑  收藏  举报