• etc


    小小的注意点们

    • 交换两个变量的值时, 如果使用异或运算符, 需要先判断两个数是否相等
    if (a == b) return;
    a ^= b;
    b = a ^ b;
    a ^= b;
    
    
    • 取一个数组的中间位置, 应该使用(low + high) / 2, 不适用length / 2, 目的是方便之后可能出现的函数的递归等操作

    • 堆排序

      • 对一个整数类型的数组进行升序排序
        1. 原始数组即为一个二叉堆(左孩子的下标=父亲的下标 * 2 + 1, 右孩子的下标=父亲的下标 * 2 + 2, 孩子父亲的下标=(孩子的下标 - 1) / 2)
        2. 调整堆, 将堆转换为最大堆(判断if parent < two_children: swap(parent, larger_child))
        3. 删除原始堆中最后的一个元素(并不是真的删除, 而是该堆的length - 1), 对仍然保留在堆中的元素进行$2的操作
    • 快速排序

      • 递归成立的条件式low < high

    Code here

    
    #include <stdio.h>
    #include <stdlib.h>
    #include <time.h>
    
    #define ARRAY_PRINT(arr, length) do {                
    for (int i = 0; i < length; i++) {                    
    printf("%d	", arr[i]);                             
    }                                                     
    } while (0)
    
    #define SWAP(a, b)    do {            
    if (a == b) break;            
    (a) ^= (b);                
    (b) = (a) ^ (b);            
    (a) ^= (b);                
    } while (0)
    
    #define MID(low, high) ((low + high) / 2)
    
    static void quick_sort_recurision(int *a, int low, int high) {
        int pivot, i, j;
        pivot = low; // select a pivot element
        i = low;
        j = high;
        if (high - low) return;
        while (i <= j) {
            if (a[i] <= a[pivot] && i <= high) {
                i++;
            }
            else if (a[j] > a[pivot] && j >= low) {
                j--;
            }
            else {
                SWAP(a[i], a[j]);
            }
        }
        SWAP(a[j], a[pivot]);
        quick_sort_recurision(a, low, j - 1);
        quick_sort_recurision(a, j + 1, high);
    }
    
    void quick_sort(int *arr, int len) {
        if (!arr || len < 0) return;
        int low = 0, high = len - 1;
        quick_sort_recurision(arr, low, high);
    }
    
    #define LENGTH 10
    
    int main() {
        srand((int) time(0));
        int arr[LENGTH];
        for (int i = 0; i < LENGTH; i++) {
            arr[i] = rand() % 60;
        }
        ARRAY_PRINT(arr, LENGTH);
        quick_sort(arr, LENGTH);
        putchar(10);
        ARRAY_PRINT(arr, LENGTH);
        return 0;
    }
    
    
  • 相关阅读:
    项目Alpha冲刺(团队)-第七天冲刺
    NOIP模拟赛[补档]
    关于补档
    noip2017集训测试赛(三) Problem B: mex [补档]
    初赛准备 [补档]
    记录 [补档]
    Leave It Behind and Carry On ---- 高一下期末考反思 [补档]
    NOIP 2017 赛后反思 [补档]
    囤题 [补档]
    组合游戏学习笔记 [补档]
  • 原文地址:https://www.cnblogs.com/megachen/p/9555958.html
Copyright © 2020-2023  润新知