/*
今天学习counting sort,下面是c的counting sort实现。。
这个版本比较简单,只能排 大于等于0的array,有负数的情况还要做一些改变。
需要注意的是,这个版本是一个 non-stable sorting 因为最后一个for loop,是从array的左边开始的,
对于这个例子stable或者non-stable都不重要,但如果要把counting sort作为radix sort的子程序的话,
就一定要保证最后一个loop是从array的右边开始,这样可以保证它一定是stable的。
*/
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
// finds max value of a given array.
int max(int *array, int SIZE) {
int m = array[0];
for (int i=1; i<SIZE; ++i) {
if (array[i] > m) {
m = array[i];
}
}
return m;
}
int * countSort(int *array, int SIZE) {
// finds upperbound
int MAX = max(array, SIZE);
// sets up the array for holding the count
int count[MAX + 1];
// this array is for output
int *output = (int*) malloc(sizeof(int) * SIZE);
// initilizes both arrays to all-0
memset(count, 0, (MAX+1) * sizeof(int));
memset(output, 0, SIZE * sizeof(int));
// counts occurrence of element in to-be-sorted array
for (int i=0; i<SIZE; i++) {
count[array[i]] ++;
}
// sums up occurrence towards right
// the value means the correct position an element should be.
for (int i=1; i<(MAX+1); i++) {
count[i] += count[i-1];
}
// sorts the array through mapping from count array.
for (int j=0; j<SIZE; ++j) {
output[count[array[j]] - 1] = array[j];
count[array[j]] --;
}
return output;
}
int main()
{
// array to be sorted.
int arr[] = {4, 9, 2, 4, 7, 6};
int SIZE = sizeof(arr) / sizeof(int);
int *result = countSort(arr, SIZE);
// prints out sorted array.
for (int i=0; i<SIZE; i++){
printf("%d ", result[i]);
}
printf("\n");
free(result);
return 0;
}
相关推荐
分类算法:监督学习中常用的分类算法及其优缺点
分类算法:监督学习中常用的分类算法及其优缺点 1. 背景介绍 1.1 问题的由来 分类算法是机器学习领域中最经典和广泛应用的算法之一。在现实世界中,我们经常需要对未知样本进行分类,例如垃圾邮件检测、图像分类、情感分析等。分类算法通过对
(精确度,召回率,真阳性,假阳性)ACC、敏感性、特异性等 ROC指标
(精确度,召回率,真阳性,假阳性)ACC、敏感性、特异性等 ROC指标,计算原理,依次列出。
【机器学习】分类性能度量指标 : ROC曲线、AUC值、正确率、召回率、敏感度、特异度
本文转自 http://zhwhong.ml/2017/04/14/ROC-AUC-Precision-Recall-analysis/ 在分类任务中,人们总是喜欢基于错误率来衡量分类器任务的成功程度。错误率指的是在所有测试样例中错分的样例比例。实际上,这样的度量错误掩盖了样例如何被分错的事实。在机器学习中,有一个普遍适用的称为混淆矩阵(confusion matrix)的工具,它可以帮助人们更
常用分类算法的优缺点
常用分类算法的优缺点? 算法 优点 缺点 Bayes 贝叶斯分类法 1)所需估计的参数少,对于缺失数据不敏感。2)有着坚实的数学基础,以及稳定的分类效率。 1)假设属性之间相互独立,这往往并不成立。(喜欢吃番茄、鸡蛋,却不喜欢吃番茄炒蛋)。2)需要知道先验概率。3)分类决策存在错误率。 Decision Tree决策树 1)不需要任何领域知识或参数假设。2...
常用的分类算法及其优缺点
常用的分类算法包括决策树、朴素贝叶斯、支持向量机(SVM)、K-近邻(KNN)、逻辑回归以及神经网络等。每种算法都有其独特的优点和缺点,适用于不同的场景和需求。
常用分类算法优缺点
贝叶斯算法(Bayes) 优点:1:所需估计的参数少,对于缺失数据不敏感。2:有着坚实的数学基础,以及稳定的分类效率。 缺点:1:需要假设属性之间相互独立,这往往不成立(例如,喜欢吃番茄,鸡蛋,缺不喜欢吃番茄吵鸡蛋)。2:需要知道先验概率。3:分类决策存在错误率 决策树(Decision Tree) 优点:1:不需要任何领域知识或参数假设。2:适合高维数据。3:简单,易于理解。4:能够在短时间内处理大量数据,得到可行且效果较好的结果。5:能够同时处理数据型和常规型属性。 缺点:1:对于各类别样本数量不
常用分类算法的优缺点和相关评价指标
算法 优点 缺点 Bayes 贝叶斯分类法 1)所需估计的参数少,对于缺失数据不敏感。2)有着坚实的数学基础,以及稳定的分类效率。 1)假设属性之间相互独立,这往往并不成立。(喜欢吃番茄、鸡蛋,却不喜欢吃番茄炒蛋)。2)需要知道先验概率。3)分类决策存在错误率。 Decision Tree决策树 1)不需要任何领域知识或参数假设。2)适合高维数据。3)简...
机器学习常用的分类算法优缺点、
面试过程中,当与面试聊到某种机器学习的算法的时候会提及某种算法的优缺点。目录正则化算法(Regularization Algorithms)集成算法(Ensemble Algorithms)决策树算法(Decision Tree Algorithm)回归(Regression)人工神经网络(Artificial Neural Network)深度学习(Deep Learning)支持向量机(Sup...
数据挖掘算法——常用分类算法总结
常用分类算法总结分类算法总结NBC算法LR算法SVM算法ID3算法C4.5 算法C5.0算法KNN 算法ANN 算法 分类算法总结 分类是在一群已经知道类别标号的样本中,训练一种分类器,让其能够对某种未知的样本进行分类。分类算法属于一种有监督的学习。分类算法的分类过程就是建立一种分类模型来描述预定的数据集或概念集,通过分析由属性描述的数据库元组来构造模型。分类的目的就是使用分类对新的数据集进行划分...
机器学习面试第1弹 常用分类算法的优缺点 + 线性回归vs.逻辑回归 + 逻辑回归vs. SVM
1. 常用分类算法的优缺点 2.线性回归vs.逻辑回归 3.逻辑回归vs. SVM 相同点: 1.都是分类模型 2.都是判别模型 不同点: 1.从损失函数角度:SVM用的是hinge loss,而logistic回归用的是对率损失 2.从风险函数角度:SVM软间隔自带正则,属于结构风险最小化;logis...
常用数据分类算法原理介绍、优缺点分析与代码实现[LR/RF/DT/SVM/NavieBayes/GBDT/XGBoost/DNN/LightGBM等]
常用数据分类算法原理介绍、优缺点分析与代码实现[LR/RF/DT/SVM/NavieBayes/GBDT/XGBoost/DNN/LightGBM等]
常用分类算法(决策树、KNN、ANN、SVM、朴素贝叶斯)优缺点总结【精炼版】
决策树: 优点: 简单易于理解 缺点
各常用分类算法的优缺点总结:DT/ANN/KNN/SVM/GA/Bayes/Adaboosting/Rocchio
1决策树(Decision Trees)的优缺点决策树的优点:一、 决策树易于理解和解释.人们在通过解释后都有能力去理解决策树所表达的意义。二、 对于决策树,数据的准备往往是简单或者是不必要的.其他的技术往往要求先把数据一般化,比如去掉多余的或者空白的属性。三、 能够同时处理数据型和常规型属性。其他的技术往往要求数据属性的单一。四、 ...
sklearn的分类器算法
文章目录分类算法之k-近邻定义计算距离公式sklearn k-近邻算法APIk近邻算法实例-预测入住位置数据的处理实例流程k值k近邻算法作业 分类算法之k-近邻 k-近邻算法采用测量不同特征值之间的距离来进行分类 优点:精度高、对异常值不敏感、无数据输入假定 缺点:计算复杂度高、空间复杂度高 使用数据范围:数值型和标称型 定义 如果一个样本在特征空间中的k个最相似(即特征空间中最邻近)的样本中的大多数属于某一个类别,则该样本也属于这个类别。 计算距离公式 两个样本的距离可以通过如下公式计算,又叫 欧式
二、机器学习基础2(分类算法)
常用分类算法的优缺点 分类算法 优点 缺点 Bayes 贝叶斯分类法 1.所需估计参数少,对缺失数据不敏感 2.数学基础夯实,有稳定效率 1.属性相互独立 2.需先验概率 3.分类决策存在错误 Decision tree 决策树 1.不需任何知识 2.适合高维数据 3.简单易理解 4.速
聚类算法和分类算法
常用的分类算法包括: 决策树分类法 朴素的贝叶斯分类算法(native Bayesian classifier) 基于支持向量机(SVM)的分类器 神经网络法 k-最近邻法(k-nearest neighbor,kNN) 模糊分类法 下文出处 常见的聚类算法包括: ①基于划分的聚类算法 k-means: 是一种典型的划分聚类算法,它用一个聚类的中心来代表一个簇,即在迭代过程中选择的聚点不一定是聚...
559




被折叠的 条评论
为什么被折叠?



