美文网首页
算法学习

算法学习

作者: zziazm | 来源:发表于2017-09-14 10:07 被阅读5次

1.冒泡
如果要让一个数组a[n]按照从小到大的顺序排序,可以让相邻的两个数比较大小,把较大的数排到后面,第一轮比较后,将数组里最大的数放到最后面,一共要比较n-1轮。

void bubble_sort(int a[], int n){//n为数组元素的个数
    for (int i = 0; i < n-1; i++) {
        int sortedComplete = 1;
        for (int j = 0; j < n - 1 - i; j++) {
            if (a[j]>a[j+1]) {
                sortedComplete = 0;
                int tem = 0;
                tem = a[j];
                a[j] = a[j + 1];
                a[j+1] = tem;
            }
        }
        if (sortedComplete) {//如果不是0,说明没有进行交换,也就是说顺序已经是正确的顺序,不需要再进行后面的排序了
            break;
        }
    }
}

int main(int argc, const char * argv[]) {
    bubble_sort(b, 10);
    for (int i = 0; i < 10; i++) {
        printf("%d\n", b[i]);
    }
    return 0;
}

从上面的代码可以看出,不考虑sortedComplete的话,时间复杂度是O(N*N)。
6 2 8 7

快排:

void quick_sort(int arr[], int start, int end){
    if (start >= end) {
        return;
    }
    
    int key = arr[start];
    int i = start;
    int j = end;
    
    while (i != j) {
        while (i<j && arr[j] >= key) {
            j--;
        }
        
        while (i<j && arr[i] <= key) {
            i++;
        }
        
        if (i!=j) {
            int tem = arr[i];
            arr[i] = arr[j];
            arr[j] = tem;
        }
    }
    
    arr[start] = arr[i];
    arr[i] = key;
    
    quick_sort(arr, start, i-1);
    quick_sort(arr, i+1, end);
}

从上面的代码可以看出,快排是先以数组的第一个数位基准数,从右边的下标high开始往前寻找,当找到小于基准数的下标时,在从左边的下标i开始寻找,找到大于基准数的下标,然后交换下标i和j对应的值,然后继续寻找,直到i=j时,此时交换基准数和j对应的数,保证了基准数左边的数都比基准数小,右边的数都比基准数要大。然后对基准数两边的自己递归地使用上面的方法,从而达到排序的效果。

相关文章

  • StanFord 机器学习公开课笔记(4):生成学习算法

    本讲视频及讲义链接 生成学习算法 生成学习算法和判别学习算法的区别 判别学习算法(Discriminative) ...

  • 机器学习(1)——几个基本要素

    学习算法 什么是学习算法,学习当然不是一个动词,学习算法最简单的理解便是能够从数据中学习的算法,学习的解释根据 M...

  • 谁能看懂这个

    机器学习算法盘点:人工神经网络、深度学习 机器学习的算法很多。很多时候困惑人们都是,很多算法是一类算法,而有些算法...

  • Adaboost算法

    AdaBoost是典型的Boosting算法。Boosting提升算法,是将“弱学习算法“提升为“强学习算法”的过...

  • 机器学习4:局部加权回归

    参数学习算法,非参数学习算法 参数学习算法,用固定的明确的参数进行数据的拟合。比如线性回归。非参数学习算法,使用的...

  • 人工智能学习

    人工智能算法可以分为机器学习算法(Machine Learning)和深度学习算法(Deep Learning) ...

  • 机器学习算法分类大全

    机器学习算法可以分为监督学习算法、无监督学习算法和半监督学习算法,下面以思维导图的形式总结了一下常见的监督学习和无...

  • 《机器学习(周志华)》学习笔记(三)

    Q:机器学习中最简单的学习算法是什么? A:最简单的机器学习算法莫过于线性回归算法了。线性回归算法的基本形式如下:...

  • OpenCV算法学习笔记之边缘检测(一)

    此系列的其他文章:OpenCV算法学习笔记之初识OpenCVOpenCV算法学习笔记之几何变换OpenCV算法学习...

  • OpenCV算法学习笔记之边缘检测(二)

    此系列的其他文章:OpenCV算法学习笔记之初识OpenCVOpenCV算法学习笔记之几何变换OpenCV算法学习...

网友评论

      本文标题:算法学习

      本文链接:https://www.haomeiwen.com/subject/gwpcsxtx.html