menu 极光萝卜
C#代码:几个数组排序算法(冒泡丨选择丨直接插入)
folder_special 笔记    access_time 2016-7-3   remove_red_eye 1303   comment 0

冒泡排序:

大概思想是依次比较相邻的两个数,如果前面的比后面大则交换位置,这样一轮后最大的数就会排在最后面。总共进行[个数-1]轮


        static void Main()
        {
            int[] SortArr = new int[] { 78, 99, 58, 16, 256, 184, 3, 450, 233, 666 };
            Console.WriteLine("待排序列:");
            for(int i = 0; i < SortArr.Length; i++)//循环输出待排序列
            {
                Console.Write(SortArr[i] + "  ");
            }
            Console.WriteLine();//换行
            for(int i = SortArr.Length - 1; i > 0; i--)//进行个数-1轮排序
            {
                for(int j = 0; j < i; j++)//比较一轮
                {
                    if (SortArr[j] > SortArr[j + 1])//交换
                    {
                        int k = SortArr[j];
                        SortArr[j] = SortArr[j + 1];
                        SortArr[j + 1] = k;
                    }
                }
            }
            Console.WriteLine("排序后:");
            for (int i = 0; i < SortArr.Length; i++)//循环输出排序后序列
            {
                Console.Write(SortArr[i] + "  ");
            }
        }

结果:

maopao.png

选择排序:

大概思想是每次在n个元素中选取最小的元素,放在序列的第一位。循环选择n-1次后便完成排序


        static void Main()
        {
            int[] SortArr = new int[] { 111, 33, 58, 16, 69, 184, 9, 888, 233, 120 };
            Console.WriteLine("待排序列:");
            for(int i = 0; i < SortArr.Length; i++)//循环输出待排序列
            {
                Console.Write(SortArr[i] + "  ");
            }
            Console.WriteLine();//换行
            for (int i = 0; i < SortArr.Length-1; i++)//进行个数-1次轮
            {
                int min = i;//min用来存放当前最小元素下标
                for(int j = i + 1; j < SortArr.Length; j++)//依次把当前最小和其他进行比较,最后选出真正最小的
                {
                    if (SortArr[min] > SortArr[j])
                    {
                        min = j;
                    }
                }
                int k = SortArr[min];
                SortArr[min] = SortArr[i];
                SortArr[i] = k;
            }
            Console.WriteLine("排序后:");
            for (int i = 0; i < SortArr.Length; i++)//循环输出排序后序列
            {
                Console.Write(SortArr[i] + "  ");
            }
        }
结果:


xuanze.png

直接插入排序:

大概思想是将一个元素插入到一个有序序列(只有一个元素=有序序列),得到一个新的有序序列。一个个往里面插,最后整个序列有序


        static void Main()
        {
            int[] SortArr = new int[] { 55, 33, 99, 119, 666, 184, 1, 911, 235, 120 };
            Console.WriteLine("待排序列:");
            for(int i = 0; i < SortArr.Length; i++)//循环输出待排序列
            {
                Console.Write(SortArr[i] + "  ");
            }
            Console.WriteLine();//换行
            for(int i = 1; i < SortArr.Length; i++)//循环插入
            {
                int k = SortArr[i];//保存被插入数的值
                int j = i;
                while (j > 0 && SortArr[j - 1] > k)
                {
                    SortArr[j] = SortArr[j - 1];
                    --j;
                }
                SortArr[j] = k;
            }
            Console.WriteLine("排序后:");
            for (int i = 0; i < SortArr.Length; i++)//循环输出排序后序列
            {
                Console.Write(SortArr[i] + "  ");
            }
        }
结果:


zhijiecharu.png

local_offer C# 算法