C#中常见的数组(一维)排序算法(V客学院知识分享)

选择排序:

       排序轮数:元素个数-1

       算法逻辑:每一轮获取当前轮的第一个元素,依次和其后的各个元素进行比较,按照排序规则进

         行相应的元素值交换。每一轮排序完成,会找到当前轮的一个最值存储在第一个元素中,下一轮比较

       忽略该元素

            例:8  3 6  5  1   从小到大排序

             * 第一轮:

                1  8 6  5  3   

             * 第二轮

                    3 8  6  5

             * 第三轮

                        5 8  6

             * 第四轮

                            6 8

选择排序写法:

            //外层循环控制排序轮数

            for (int i = 0; i < array.Length- 1; i++)

          {

                //内层循环控制每一轮的内部比较操作

                for (int j= i+ 1; j<array.Length; j++)

                   {

                    //从小到大排序,如果第一个元素值比后面的大则交换

                    if (array[i]> array[j]) {

                        int tmp= array[i];

                        array[i]= array[j];

                        array[j] = tmp;

                    }

            

冒泡排序:

      排序轮数:元素个数-1

      算法逻辑:每一轮从首元素开始依次比较相邻的两个元素,按照排序规则进行相应交换。每一轮

            比较完成找出当前轮的最后一个元素存储一个最值,下一轮比较忽略该元素

       例:1 5  6  8 4  从大到小排序

             * 第一轮:

                   5 6  8  4  1

             * 第二轮:

                   6 8  5  4

             * 第三轮:

                   8 6  5

             * 第四轮:

                   8 6

            

冒泡排序写法:

            //外层循环控制轮数

            for (int i = 0; i < array.Length- 1; i++)

           {

                //内层循环控制每一轮的内部比较

                //每一轮都从首元素开始,相邻两个依次比较,循环终止条件为元素个数-1并且每一轮完成还要额

                   外去掉一个

                for (int j = 0; j < array.Length - 1- i;j++)

                {

                    if(array[j] < array[j +1])

                    {

                        int tmp= array[j];

                        array[j] = array[j +1];

                        array[j + 1] = tmp;

                    }

                }

            }

插入排序:

  排序轮数:元素个数-1

   算法逻辑:插入排序是每一轮选定一个值,然后来追踪该值找到其在初始所在元素左侧最合理的位置。第一轮找到第二个元素的值作为要追踪的值,向左查找最合理位置。以后各轮依次向后后移找到初始元素值,进行操作

              15  6 8  9 14  从小到大排序

             * 第一轮

               * 6  15 8  9  14  起始下标:追踪的值:6

             * 第二轮

               * 6  8 15  9  14  起始下标:追踪的值:8

             * 第三轮

               * 6  8 9  15  14  起始下标:追踪的值:9

             * 第四轮

               * 6  8 9  14  15 起始下标:追踪的值:14  

插入排序写法:

//外层循环控制轮数

            for (int i = 0; i < array.Length- 1; i++)

            {

                //记录内层循环要追踪值的初始下标, 其后用其记录追踪值的所在下标

                int index = i+ 1;

                //内层循环控制每一轮的内部比较

                for (int j = index - 1; j >=0; j--)

                {

                    //从小到大排序,后面的比前面的小就交换

                    if (array[index] <array[j])

                    {

                        int tmp= array[index];

                        array[index] =array[j];

                        array[j] = tmp;

                        //若交换,则记录追踪值的新的所在位置

                        index = j;

                    }

                }

            }

(PHP开发、web前端、UI设计、VR开发专业培训机构-vIT学院版权所有,转载请注明出处,谢谢合作!)

猜你喜欢

转载自blog.csdn.net/g_peter/article/details/80522261