自己的网站如何让百度收录,今天广州白云新闻,酒店电子商务网站建设流程,卡片式设计的网站算法主要衡量标准时间复杂度(运行时间)在算法时间复杂度维度#xff0c;我们主要对比较和交换的次数做对比#xff0c;其他不交换元素的算法#xff0c;主要会以访问数组的次数的维度做对比。其实有很多同学对于算法的时间复杂度有点模糊#xff0c;分不清什么所谓的 O(n),…算法主要衡量标准 时间复杂度(运行时间)在算法时间复杂度维度我们主要对比较和交换的次数做对比其他不交换元素的算法主要会以访问数组的次数的维度做对比。其实有很多同学对于算法的时间复杂度有点模糊分不清什么所谓的 O(n),O(nlogn),O(logn)...等也许下图对一些人有一些更直观的认识。空间复杂度(额外的内存使用)排序算法的额外内存开销和运行时间同等重要。 就算一个算法时间复杂度比较优秀空间复杂度非常差使用的额外内存非常大菜菜认为它也算不上一个优秀的算法。结果的正确性这个指标是菜菜自己加上的我始终认为一个优秀的算法最终得到的结果必须是正确的。就算一个算法拥有非常优秀的时间和空间复杂度但是结果不正确又有什么意义呢原理每次在无序的列表中取一个元素插入到一个有序列表的适当位置成为一个元素加1的新的有序列表。。插入排序根据原理又分为 直接插入排序、二分插入排序、希尔排序等今天主要讲一下直接插入排序。*直接插入排序是一种稳定的排序算法假设排序顺序从左至右具体步骤如下1. 列表第一个元素和前面元素比较如果小于前面元素(其实不存在)则交换位置。(这步其实可以没有)2. 列表第二个元素和前面元素(第一个元素)比较如果小于前面元素则交换位置。3. 列表第三个元素和前面元素(第二个元素)比较如果小于前面元素则交换位置。如果和前面元素交换了位置现在在第二个位置上则接着继续和前面元素比较(第一个元素)如果小于前面元素接着再次交换位置然后再次重复比较过程.......继续重复以上过程直到最后一个元素完成比较比较移动过程中如果元素不需要移动意味着该元素排序完毕。网络上的插入排序大多都是新建一个有序列表用来存放最终结果其实在无序列表上进行排序操作空间复杂度才更优也许一张更直观的图比上千句话效果都好复杂度时间复杂度1. 比较次数对于长度为N的主键不重复的列表插入排序 平均情况下需要n²/4次比较最坏情况下需要n²/2次比较最好的情况下需要n-1 次比较。2. 交换次数对于长度为N的主键不重复的列表插入排序平均情况下需要n²/4次交换最坏情况下需要n²/2次交换最好情况下需要0次交换。性能和特点总体来说直接插入排序是一种比较简单的排序算法很容易理解也很好用代码实现当然他的特点也很明显运行时间和数据初始状态有关插入排序的思想是把一个元素插入一个有序的列表中假如这个元素的位置正好是有序部分的末尾呢也就是说当前元素不用移动位置。再一次假如整个列表都是有序的会发生什么情况呢根本就不需要移动任何元素。这也就是为什么在最好的情况下交换次数为0比较次数为n-1的原因。假如列表的很大一部分元素是有序的插入排序可能比大多数排序算法都要快。适用场景直接插入排序对于小型列表或者非随机元素列表很有效。例如部分元素有序。大体可归纳为1. 每个元素距离自己的最终位置都不远。2. 一个有序的大列表连接一个小列表。3. 列表中只有少数元素不正确。其他为什么插入排序是稳定呢插入排序是在一个已经有序的小序列的基础上一次插入一个元素。当然刚开始这个有序的小序列只有1个元素就是第一个元素。比较是从有序序列的末尾开始也就是想要插入的元素和已经有序的最大者开始比起如果比它大则直接插入在其后面否则一直往前找直到找到它该插入的位置。如果碰见一个和插入元素相等的那么插入元素把想插入的元素放在相等元素的后面。所以相等元素的前后顺序没有改变从原无序序列出去的顺序就是排好序后的顺序所以插入排序是稳定的。实现案例 static void Main(string[] args) { List data new List() ; for (int i 0; i 10; i) { data.Add(new Random(Guid.NewGuid().GetHashCode()).Next(1, 100)); } //打印原始数组值 Console.WriteLine($原始数据 {string.Join(