cpp基础入门学习快快排、指针、函数、递归、费波拉且数列、剪枝

nzta · 发布于 2023-07-20 · 浏览 795 回复 17
void quickSort(int* arr, int low, int high) {
    if (low >= high) { // 结束标志
        return;
    }
    
    int first = low; //地位坐标
    int last = high; //高位坐标
    int key = arr[first]; //设置第一个为基准
    
    while (first < last) {
        //将比第一个小的移到前面
        while (first < last && arr[last] >= key) {
            last--;
        }
        if (first < last) {
            arr[first++] = arr[last];
        }
        
        //将比第一个大的移到后面
        while (first < last && arr[first] <= key) {
            first++;
        }
        if (first < last) {
            arr[last--] = arr[first];
        }
    }
    
    arr[first] = key;
    
    //前半递归
    quickSort(arr, low, first - 1);
    //后半递归
    quickSort(arr, first + 1, high);
}

  1. void quickSort(int *arr, int low, int high): 这是一个函数声明,它表示定义了一个名为 quickSort 的函数,该函数接受一个指向整型数组的指针 arr,以及最低索引 low 和最高索引 high。

  2. if (low >= high) { return; }: 这一行检查最低索引 low 是否大于等于最高索引 high。如果是,说明已经完成了对这个子数组的排序,直接返回结束递归。

  3. int first = low;: 初始化一个变量 first,它指向最低索引 low。

  4. int last = high;: 初始化一个变量 last,它指向最高索引 high。

  5. int key = arr[first];: 将数组中第一个元素作为基准值 key。

  6. while (first < last) {: 这个循环用于进行分区操作,当 first 指针小于 last 指针时,执行以下操作。

  7. while (first < last && arr[last] >= key) { last--; }: 从数组的高位开始,向前搜索,找到第一个小于基准值 key 的元素,并将 last 指针向前移动。

  8. if (first < last) { arr[first++] = arr[last]; }: 若 first 指针小于 last 指针,则将找到的小于基准值的元素移到低位,并将 first 指针向后移动。

  9. while (first < last && arr[first] <= key) { first++; }: 从数组的低位开始,向后搜索,找到第一个大于基准值 key 的元素,并将 first 指针向后移动。

  10. if (first < last) { arr[last--] = arr[first]; }: 若 first 指针小于 last 指针,则将找到的大于基准值的元素移到高位,并将 last 指针向前移动。

  11. arr[first] = key;: 将基准值 key 放置到正确的位置上。

  12. quickSort(arr, low, first - 1);: 对基准值左边的子数组进行递归排序,即调用 quickSort 函数处理最低索引到基准值位置之间的部分。

  13. quickSort(arr, first + 1, high);: 对基准值右边的子数组进行递归排序,即调用 quickSort 函数处理基准值位置到最高索引之间的部分。

通过不断地选择基准值并将数组分为两个部分,然后对这两个部分进行递归排序,最终实现了快速排序算法。这种分治的思想使得排序的效率较高。

全部回复 共 17 条

  1. nzta #16 楼主 ·
  2. nzta #17 楼主 ·
    #include <iostream>
    using namespace std;
    
    int fibonacci(int n) {
        if (n <= 2)
            return 1;
    
        int a = 1, b = 1;
        for (int i = 3; i <= n; i++) {
            int temp = (a + b) % 100000007;
            a = b;
            b = temp;
        }
    
        return b;
    }
    
    int main() {
        int n;
        cin >> n;
    
        int result = fibonacci(n);
        cout << result << endl;
    
        return 0;
    }
    

发表回复