显示列表
 直接选择排序2008-07-03

直接选择排序
直接选择排序是一种选择排序,是一种不稳定的排序,时间复杂度为 O(n^2)。


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

40 10 20 15
①{10} 40 20 15 将第一个元素 40 和无序区中最小的 10 交换
②{10 15} 20 40 将第二个元素 40 和无序区中最小的 15 交换
③{10 15 20} 40 将第三个元素 20 已是无序区中最小不用交换
④{10 15 20 40} 到倒数第二个元素结束

例子


using System;
using System.Collections;


namespace System
{
    public class Test
    {
        public static void Main()
        {
            int[] array = new int[6] { 40, 10, 20, 15, 35, 20 };

            SelectionSort.Sort(array);

            PrintArray(array);
            Console.ReadKey();
        }

        public static void PrintArray(int[] array)
        {
            for (int i = 0; i < array.Length; i++)
            {
                if (i > 0) Console.Write(" ");
                Console.Write(array[i].ToString());
            }
            Console.WriteLine();
        }
    }

    public class SelectionSort
    {
        public static void Sort(int[] sortArray)
        {
            // 从起始元素开始选到倒数第二个元素
            for (int i = 0; i < sortArray.Length - 1; i++)
            {
                int min = i;
                for (int j = i + 1; j < sortArray.Length; j++) // 循环无序区,找到最小元素的下标 min
                {
                    if (sortArray[j] < sortArray[min])
                    {
                        min = j;
                    }
                }

                // 将从无序区选出的最小元素和当前待处理的有序区交换
                if (i != min)
                {
                    Swap(ref sortArray[i], ref sortArray[min]);
                }
            }
        }


        private static void Swap(ref int a, ref int b)
        {
            int t;
            t = a;
            a = b;
            b = t;
        }
    }
}

标签:算法 
返回摘要 | 分类(C#/CSharp) | 访问(2) | 编辑