首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往
您找到你想要的搜索结果了吗?
是的
没有找到

【开发基础】编程:常见排序算法汇总

排序算法有很多,所以在特定情景中使用哪一种算法很重要。为了选择合适的算法,可以按照建议的顺序考虑以下标准: (1)执行时间 (2)存储空间 (3)编程工作 对于数据量较小的情形,(1)(2)差别不大,主要考虑(3);而对于数据量大的,(1)为首要。 主要排序法有: 一、冒泡(Bubble)排序——相邻交换 二、选择排序——每次最小/大排在相应的位置 三、插入排序——将下一个插入已排好的序列中 四、壳(Shell)排序——缩小增量 五、归并排序 六、快速排序 七、堆排序 八、拓扑排序 九、锦标赛排序 十、基数排序 一、冒泡(Bubble)排序 ----------------------------------Code 从小到大排序n个数------------------------------------ void BubbleSortArray() { for(int i=1;i<n;i++) { for(int j=0;i<n-i;j++) { if(a[j]>a[j+1])//比较交换相邻元素 { int temp; temp=a[j]; a[j]=a[j+1]; a[j+1]=temp; } } } } -------------------------------------------------Code------------------------------------------------ 效率 O(n²),适用于排序小列表。 二、选择排序 ----------------------------------Code 从小到大排序n个数-------------------------------- void SelectSortArray() { int min_index; for(int i=0;i<n-1;i++) { min_index=i; for(int j=i+1;j<n;j++)//每次扫描选择最小项 if(arr[j]<arr[min_index]) min_index=j; if(min_index!=i)//找到最小项交换,即将这一项移到列表中的正确位置 { int temp; temp=arr[i]; arr[i]=arr[min_index]; arr[min_index]=temp; } } } -------------------------------------------------Code----------------------------------------- 效率O(n²),适用于排序小的列表。 三、插入排序 --------------------------------------------Code 从小到大排序n个数------------------------------------- void InsertSortArray() { for(int i=1;i<n;i++)//循环从第二个数组元素开始,因为arr[0]作为最初已排序部分 { int temp=arr[i];//temp标记为未排序第一个元素 int j=i-1; while (j>=0 && arr[j]>temp)/*将temp与已排序元素从小到大比较,寻找temp应插入的位置*/ { arr[j+1]=arr[j]; j--; } arr[j+1]=temp; } } ------------------------------Code-------------------------------------------------------------- 最佳效率O(n);最糟效率O(n²)与冒泡、选择相同,适用于排序小列表 若列表基本有序,则插入排序比冒泡、选择更有效率。 四、壳(Shell)排序——缩小增量排序 -------------------------------------Code 从小到大排序n个数------------------------------------- void ShellS

06

Nature Machine Intelligence | 三种类型的增量学习

今天给大家带来一篇剑桥大学有关增量学习的文章。从非平稳的数据流中渐进地学习新信息,被称为“持续学习”,是自然智能的一个关键特征,但对深度神经网络来说是一个具有挑战性的问题。近年来,许多用于持续学习的深度学习方法被提出,但由于缺乏共同的框架,很难比较它们的性能。为了解决这个问题,我们描述了持续学习的三种基本类型或“场景”:任务增量式学习、领域增量式学习和类增量式学习。每一种情况都有自己的挑战。为了说明这一点,作者通过根据每个场景执行Split MNIST和Split CIFAR-100协议,对目前使用的持续学习策略进行了全面的实证比较。作者证明了这三种情况在难度和不同策略的有效性方面存在实质性差异。提出的分类旨在通过形成清晰定义基准问题的关键基础来构建持续学习领域。

02

R语言从入门到精通:Day16(机器学习)

在上一次教程中,我们介绍了把观测值凝聚成子组的常见聚类方法。其中包括了常见聚类分析的一般步骤以及层次聚类和划分聚类的常见方法。而机器学习领域中也包含许多可用于分类的方法,如逻辑回归、决策树、随机森林、支持向量机(SVM)等。本次教程的内容则主要介绍决策树、随机森林、支持向量机这三部分内容,它们都属于有监督机器学习领域。有监督机器学习基于一组包含预测变量值和输出变量值的样本单元,将全部数据分为一个训练集和一个验证集,其中训练集用于建立预测模型,验证集用于测试模型的准确性。这个过程中对训练集和验证集的划分尤其重要,因为任何分类技术都会最大化给定数据的预测效果。用训练集建立模型并测试模型会使得模型的有效性被过分夸大,而用单独的验证集来测试基于训练集得到的模型则可使得估计更准确、更切合实际。得到一个有效的预测模型后,就可以预测那些只知道预测变量值的样本单元对应的输出值了。

01
领券