• 归并排序


    归并排序

    1. 申请空间,使其大小为两个已经排序序列之和,该空间用来存放合并后的序列
    2. 设定两个指针,最初位置分别为两个已经排序序列的起始位置
    3. 比较两个指针所指向的元素,选择相对小的元素放入到合并空间,并移动指针到下一位置
    重复步骤3直到某一指针超出序列尾
    将另一序列剩下的所有元素直接复制到合并序列尾

    代码


    #include <stdio.h>
    
    int helperArr[10];
    
    void Merge(int arr[], int l, int mid, int r)
    {
        int i = l;
        int p1 = l;
        int p2 = mid + 1;
        while (p1 <= mid && p2 <= r) {
            helperArr[i++] = arr[p1] > arr[p2] ? arr[p2++] : arr[p1++];
        }
        while (p1 <= mid) {
            helperArr[i++] = arr[p1++];
        }
        while (p2 <= r) {
            helperArr[i++] = arr[p2++];
        }
    
        for (; l <= r; l++) {
            arr[l] = helperArr[l];
        }
    }
    
    void MergeSort(int arr[], int l, int r)
    {
        if (l == r) {
            return;
        }
        int mid = l + ((r - l) >> 1); // =(l+r)/2 因为l+r有可能会溢出,所以改成减法的方式
        MergeSort(arr, l, mid);
        MergeSort(arr, mid + 1, r);
        Merge(arr, l, mid, r);
    }
    
    void PrintArr(int arr[], int size)
    {
        for (int i = 0; i < size; ++i) {
            printf("%d ", arr[i]);
        }
        printf("
    ");
    }
    
    int main()
    {
        int arr[10] = {6, 0, 5, 3, 15, 21, 13, 9, 12, 8};
        PrintArr(arr, 10);
        MergeSort(arr, 0, 9);
        PrintArr(arr, 10);
        return 0;
    }
    
  • 相关阅读:
    SAE/ISO standards for Automotive
    The J1850 Core
    SAE J1708 DS36277 MAX3444, DS75176B
    X431 元征诊断枪
    凯尔卡C68全球版汽车电脑诊断仪
    汽车王牌
    Vehicle’s communication protocol
    Vehicle Network Protocols -- ISO/KWP CAN CCD PCI SCI / SCP / Class 2
    On-board diagnostics -- Standards documents
    On-board diagnostics connector SAE J1962
  • 原文地址:https://www.cnblogs.com/causewang/p/12063785.html
Copyright © 2020-2023  润新知