zoukankan      html  css  js  c++  java
  • 初等排序_学习笔记

    初等排序_学习笔记

    插入排序

    • 将开头元素视作已排序;
    • 执行下述处理,直至未排序不部分消失;
      • 取出未排序部分的开头元素赋给变量v;
      • 在已排序部分,将所有比v大的元素向后移动一个单位;
      • 将已取出的元素v插入空位。
    void insertSort(int A[], int len) {
        int i, j, v;
        for (i=1; i<len; i++) {
            v = A[i];
            j = i-1;
            while (j>=0 && A[j]>v) {
                A[j+1] = A[j];
                --j;
            }
            A[j+1] = v;
        }
    }
    
    • 插入排序是稳定算法,算法复杂度为O(N^2);

    冒泡排序

    • 重复执行下述操作,直至数组中不包括顺序相反的相邻元素;
      • 从数组末尾开始依此比较相邻两个元素,如果大小关系相反则交换位置;
    void bubbleSort(int A[], int N) {
        bool flag = 1;
        for (int i=0; flag; i++) {
            flag = 0;
            for (int j=N-1; j>=i+1; j--) {
                // 这里如果换成<=,将会破坏算法稳定性;
                if (A[j]<A[j-1]) {
                    // 交换前后顺序
                    swap(A[j], A[j-1]);
                    flag = 1;
                }
            }
        }
    }
    
    • 冒泡算法是稳定算法,算法复杂度为O(N^2);

    选择排序

    • 重复执行N-1次下述操作:
      • 找出未排序部分最小值的位置minj;
      • 将minj位置的元素与未排序部分的起始元素交换。
    void selectSort(int A[], int N) {
        int i, j, t, minj;
        for (i=0; i<N-1; i++) {
            minj = i;
            // 选择未排序中的最小值的位置minj
            for (j=i; j<N; j++) {
                if (A[j]<A[minj]) minj = j;
            }
            // 交换A[i]和A[minj]
            t = A[i]; A[i] = A[minj]; A[minj] = t;
        }
    }
    
    • 选择排序是不稳定算法;算法复杂度为O(N^2);

    初等排序方法总结

    • 冒泡排序和选择排序不依赖于数据,即算法复杂度不受输入数据的影响;
    • 插入排序算法时间复杂度依赖与数据,处理某些数据时具有很高的效率;

  • 相关阅读:
    js 生成32位UUID方法
    win10把控制声音改成和win7一样
    jQuery.inArray()方法
    在eclipse中安装activiti插件
    关于NOIP运输计划一题几种思路和若干种做法的研究
    该博客停止更新
    [CTSC2010]产品销售
    roi 学习轨迹
    「PA 2019」Szprotki i szczupaki
    LOJ576签到游戏
  • 原文地址:https://www.cnblogs.com/sakurapiggy/p/13377128.html
Copyright © 2011-2022 走看看