C++ | 面试常考算法题合集


1. 1~n无序数组时间复杂度为O(n)排序

解题关键点:对于排序后的数组,值和下标满足关系a[i] = i + 1

因此,可将其作为交换的终止条件。用for循环遍历数组,判断当前a[i]是否满足上述等式,如果不满足则两两交换a[i] 和 a[a[i]-1]的值,继续下一轮循环;若满足等式则执行i++操作,保证当前位置值不再被交换。直到循环结束即得到了有序的数组。

int temp;
for(int i = 0; i < len; )
{
     if (a[i] != i + 1)
    {
          temp = a[a[i] - 1];
          a[a[i] - 1] = a[i];
          a[i] = temp;
    }
     else  i++;
}

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 在C语言中,五种基本数据类型存储空间长度的排列顺序是: A)char B)char=int<=float C)ch...
    夏天再来阅读 3,421评论 0 2
  • 数组在程序设计中,为了处理方便, 把具有相同类型的若干变量按有序的形式组织起来。这些按序排列的同类数据元素的集合称...
    朱森阅读 4,009评论 2 13
  • 1.插入排序—直接插入排序(Straight Insertion Sort) 基本思想: 将一个记录插入到已排序好...
    依依玖玥阅读 1,286评论 0 2
  • 总结一下常见的排序算法。 排序分内排序和外排序。内排序:指在排序期间数据对象全部存放在内存的排序。外排序:指在排序...
    jiangliang阅读 1,391评论 0 1
  • 算法学习其实是一种学习和提高思维能力的过程。无论是在面试还是实际的工作和生活中,都会碰见一些从没遇到过的问题 真正...
    拉勾教育阅读 1,532评论 0 1