zoukankan      html  css  js  c++  java
  • 基础排序总结

    O(n^2)级别的算法主要包括:选择排序,插入排序,冒泡法排序,希尔排序等

    选择排序:选择排序,将后面未排序数组中最小的与前面的元素交换

     1 template <typename T>
     2 void selectionSort(T arr[], int n) {
     3     for (int i = 0; i < n; i++) {
     4         int minIndex = i;
     5         for (int j = i + 1; j < n; j++) {
     6             if (arr[j] < arr[minIndex])
     7                 minIndex = j;
     8         }
     9 
    10         swap(arr[i], arr[minIndex]);
    11     }
    12 }

    插入排序,选择前面数组已经排好序的部分合适的插入位置

     1 template <typename T>
     2 void insertionSort1(T arr[], int n) {
     3     for (int i = 1; i < n; i++) {
     4         T e = arr[i];
     5         int j;
     6         for (j = i; j > 0 && arr[j - 1]>e; j--) {//从后往前找合适位置插入
     7             arr[j] = arr[j - 1];
     8         }
     9         arr[j] = e;
    10     }
    11 }
    12 // 对arr[l...r]范围的数组进行插入排序
    13 template<typename T>
    14 void insertionSort(T arr[], int l, int r) {
    15 
    16     for (int i = l + 1; i <= r; i++) {
    17 
    18         T e = arr[i];
    19         int j;
    20         for (j = i; j > l && arr[j - 1] > e; j--)
    21             arr[j] = arr[j - 1];
    22         arr[j] = e;
    23     }
    24 
    25     return;
    26 }

    冒泡法:每次循环将最大的放到挤出到后面位置

     1 template <typename T>
     2 void bubbleSort(T arr[], int n) {
     3     for (int i = 0; i < n - 1; i++) {
     4         for (int j = 0; j < n - i - 1; j++) {
     5             if (arr[j + 1] < arr[j]) {
     6                 swap(arr[j + 1], arr[j]);//非常耗时
     7             }
     8         }
     9     }
    10 }
    //希尔排序
    template<typename T>
    void shellSort(T arr[], int n) {
    
        // 计算 increment sequence: 1, 4, 13, 40, 121, 364, 1093...
        int h = 1;
        while (h < n / 3)
            h = 3 * h + 1;
    
        while (h >= 1) {
    
            // h-sort the array
            for (int i = h; i < n; i++) {
    
                // 对 arr[i], arr[i-h], arr[i-2*h], arr[i-3*h]... 使用插入排序
                T e = arr[i];
                int j;
                for (j = i; j >= h && e < arr[j - h]; j -= h)
                    arr[j] = arr[j - h];
                arr[j] = e;
            }
    
            h /= 3;
        }
    }
  • 相关阅读:
    GDC2017:Framegraph-extensible-rendering-architecture-in-frostbite
    17072802(UE4的批量Import)
    16011301(统计指令数影响耗时)
    16080401(面向摄像机的Instance模型)
    UE4编译_201701
    17020701(AnimDynamic继续)
    Python过滤utf8mb4无效字符
    Windows下安装MySQL-python
    使用Pycharm更新Github项目(到源项目)
    python异常:error: command 'gcc' failed: No such file or directory
  • 原文地址:https://www.cnblogs.com/bingzzzZZZ/p/8453111.html
Copyright © 2011-2022 走看看