【排序算法】——插入排序

来源:互联网 发布:fm球员在线数据库 编辑:程序博客网 时间:2024/06/05 11:42

第一部分  理论知识

·分类

  分为直接插入排序,二分插入排序(这般插入排序),链表插入排序,希尔排序(缩小增量排序)。属于稳定排序。所有的记录插入完为止,得到一个新的有序序列。

·内部排序和外部排序

根据排序过程中涉及的存储器不同,可以讲排序方法分为两大类:一类是内部排序,指的是待排序的几率存放在计算机随机存储器中进行的排序过程;另一类的外部排序,指的是排序中要对外存储器进行访问的排序过程。
内部排序是排序的基础,在内部排序中,根据排序过程中所依据的原则可以将它们分为5类:插入排序、交换排序、选择排序、归并排序和基数排序;根据排序过程的时间复杂度来分,可以分为三类:简单排序、先进排序、基数排序。
评价排序算法优劣的标准主要是两条:一是算法的运算量,这主要是通过记录的比较次数和移动次数来反应;另一个是执行算法所需要的附加存储单元的的多少。

·直接插入排序的算法思路

  (1) 设置监视哨r[0],将待插入纪录的值赋值给r[0];
  (2) 设置开始查找的位置j;
  (3) 在数组中进行搜索,搜索中将第j个纪录后移,直至r[0].key≥r[j].key为止;
  (4) 将r[0]插入r[j+1]的位置上。

· 排列过程

   假如有一串数字  8 9 4 6 7 3  2 1 10 5  十个数字进行直接插入法排序   


                                

  直接插入排序就是将无序区的数据,在和有序区比较之后放在其合适的位置。插入算法更像是一个正的直角三角形,是一个用有序区组成的直角三角形。


· 代码实现(c#)

class 冒泡排序    {        //定义一个数组        static List<int> list = new List<int>() {8,9,4 ,6, 7,3,2,1,10,5 };        static void Main(string[] args)        {            //调用排序方法            Bubble();            PrintList();        }        //冒泡排序        static void Bubble()        {            //定义临时变量            int temp = 0;            for (int i = list.Count; i > 0; i--)            {                for (int j = 0; j < i-1; j++)                {                    //相邻的两个数进行比较,把较大的数放到后面                    if (list[j] >list[j+1])                    {                        //交换数据                        temp = list[j];                        list[j] = list[j+1];                        list[j+1] = temp;                    }                }                         }        }        private static void PrintList()        {            foreach (var item in list)            {                Console.WriteLine(string.Format("{0}", item));            }            Console.WriteLine();            Console.ReadLine();        }    }  

·总结

  老师讲了那么多的算法,都没有认真的去实现一遍挺愧疚。别忘了出来混,迟早要还的。看现在到了还账的时间了吧。当初没有好好学的,软考是都要考滴。要想比别人优秀,就要比别人多付出。啊哈,算法!终于遇见你~

0 0
原创粉丝点击