排序算法之“选择排序-冒泡排序-插入排序”

前言

    上午上课老师通过两个神似的三角形,讲了冒泡排序和选择排序的区别和联系在哪里,恰好下午看到了这样的一写关于该排序算法的一些资料,想了想还是决定试一试,因为出来混总是要还的。

排序

定义

    就是使一串记录,按照其中某个或者某个关键字的大小,递增或递减的排列起来的算法。它应用在大量数据处理方面,一个优秀的算法可以节省大量的资源。

分类

    这里浅显的说一下:插入排序、选择排序和冒泡排序。

插入排序(C#版)


 

<span style="font-family:KaiTi_GB2312;font-size:18px;">       /// <summary>
       /// 插入排序
       /// </summary>
       /// <param name="arry"></param>
        public static void InsertSort(this int[] arry)
        {   //直接插入排序是将待比较的数值与它的前一个数值进行比较;
            //所以外层循环是从第二个数值开始的
            for (int i = 1; i < arry.Length; i++)
            {
                //如果当前元素小于其前面的元素时
                if (arry[i] < arry[i - 1])
                {
                    //用一个变量来保存当前比较值,因为当一趟比较完成时,我们要将待比较数值置入
                    //比它小的数值的后一位;
                    int temp = arry[i];
                    int j = 0;
                    for (j = i - 1; j >= 0 && temp < arry[j]; j--)
                    {
                        arry[j + 1] = arry[j];//从无序区选出最大的;将最大的赋值;
                    }
                    arry[j + 1] = temp;//将从无序区选出的最大值在有序区排序。
                }
            }
        }</span>

<span style="font-family:KaiTi_GB2312;font-size:18px;">namespace Test1
{
    class Program
    {
        static void Main(string[] args)
        {   

            //插入排序
            int[] arry = new int[] { 11, 21, 13, 15, 54, 59, 57, 65 };
            arry.InsertSort();
            for (int i = 0; i < arry.Length; i++)
            {
                Console.Write("	" + arry[i]);
            }
            Console.Read();
        }
    }
}</span>

结果


冒泡(交换)和选择排序(C#版)


冒泡排序

 

<span style="font-family:KaiTi_GB2312;font-size:18px;">        /// <summary>
        /// 冒泡(交换)排序
        /// </summary>
        /// <param name="arry">要排序的整数数组</param>
        public static void Sort(this int[] arry)
        {
            for (int i = 0; i < arry.Length; i++)
            {
                for (int j = 0; j < arry.Length - 1 - i; j++)
                {
                    //比较前面两个元素,如果前面的比后面的大,则交换位置;
                    //反之不用交换位置
                    if (arry [j ]>arry [j +1])
                    {
                        int temp =arry[j +1];//给一个临时变量来作为容器,达到两个数交换位置;
                        arry [j +1]=arry [j];
                        arry [j ]=temp ;
                    }
                }
            }
        }</span>
<span style="font-family:KaiTi_GB2312;font-size:18px;">namespace Test1
{
    class Program
    {
        static void Main(string[] args)
        {   
            //冒泡(交换)排序
            int[] arry = new int[] { 6, 5, 2, 4, 9, 8, 3, 1 };
            arry.Sort();
            for (int i = 0; i < arry.Length; i++)
            {
                Console.Write("	" + arry[i]);
            }
            Console.Read();
        }
    }
}</span>
结果


选择排序

 

<span style="font-family:KaiTi_GB2312;font-size:18px;">       /// <summary>
       /// 选择排序
       /// </summary>
       /// <param name="arry">待排序的整数数组</param>
        public static void SelectSort(this int[] arry)
        {
            int temp = 0;
            for (int i = 0; i < arry.Length; i++)
            {
                for (int j = i + 1; j < arry.Length; j++)
                {
                    if (arry[i ] > arry[j])
                    {
                        temp = arry[i];
                        arry[i] = arry[j ];
                        arry[j ] = temp;
                    }
                }
            }
        }</span>

<span style="font-family:KaiTi_GB2312;font-size:18px;">namespace Test1
{
    class Program
    {
        static void Main(string[] args)
        {  

            //选择排序
            int[] arry = new int[] { 33, 45, 65, 15, 20, 74, 66, 88 };
            arry.SelectSort();
            for (int i = 0; i < arry.Length; i++)
            {
                Console.Write("	" + arry[i]);
            }
            Console.Read();
        }
    }
}</span>
结果


    每一个排序算法,都有其独特之处,现在我只是出于了解之处,希望在以后有机会多多实践。

小结

    1、一张图胜过千言万语,米老师的思想真的很棒。

    2、有些东西仅仅知道是不够的,还要学会使用。

原文地址:https://www.cnblogs.com/zhoulitong/p/6412418.html