• 基础排序总结


    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;
        }
    }
  • 相关阅读:
    Java NIO(六)选择器
    Java NIO(五)套接字通道
    Java NIO(四)文件通道
    Java NIO(三)通道
    Java NIO(二)缓冲区
    Java NIO(一)概述
    gcc中的内嵌汇编语言(Intel i386平台)
    一些汇编指令
    403 Forbidden解决方案
    Linux从入门到放弃
  • 原文地址:https://www.cnblogs.com/bingzzzZZZ/p/8453111.html
Copyright © 2020-2023  润新知