小小的注意点们

  • 交换两个变量的值时, 如果使用异或运算符, 需要先判断两个数是否相等
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\t", 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;
}

随机推荐

  1. git commit失败

    1.使用命令  git rm test.txt 删除版本库中文件, 下一步:git commit 提交 出现如图: 这是因为没有同时提交信息,即:git commit -m "这里是信息&q ...

  2. localStorage、sessionStorage、cookie的有效期和作用域问题

    sessionStorage,localStorage,cookie都可以实现客户端存储,三者的区别有哪些了? cookie作为最早期的被设计web浏览器存储少量数据,从底层看,它是作为http协议的 ...

  3. loj #2025. 「JLOI / SHOI2016」方

    #2025. 「JLOI / SHOI2016」方   题目描述 上帝说,不要圆,要方,于是便有了这道题. 由于我们应该方,而且最好能够尽量方,所以上帝派我们来找正方形.上帝把我们派到了一个有 NNN ...

  4. XtraBackup 备份与恢复实例讲解

    前一篇文章我们讲到了PXB的原理以及安装方法,接下来将详细介绍 XtraBackup 备份和恢复的具体过程. xtrabackup 选项 xtrabackup 工具有许多参数,具体可去官网查询(xtr ...

  5. phonegap移动开发之jsonp协议

    最近我一直在学习android开发.并且做了几个小软件,我会在百度网盘和二维码的形式分享出去!源码会分享到github上.下面我还是主要来说说jsonp协议吧.可能许多初学者会遇到许多跟我一样的问题. ...

  6. (Python OpenGL)【3】着色器 PyOpenGL

    (Python OpenGL)现在开始我们使用着色器来进行渲染.着色器是目前做3D图形最流行的方式. OpenGL的渲染管线流程: 数据传输到OpenGL—>顶点处理器—>细分着色—> ...

  7. flink学习笔记-快速生成Flink项目

    说明:本文为<Flink大数据项目实战>学习笔记,想通过视频系统学习Flink这个最火爆的大数据计算框架的同学,推荐学习课程: Flink大数据项目实战:http://t.cn/EJtKh ...

  8. Js 向json对象中添加新元素

    即:var json={a:1,b:2} json.c=3  添加新元素直接使用赋值就行了

  9. P3800 Power收集

    传送门 DP每次向下一格,显然是DP方程也十分显然:设$f[i][j]$为到第$i$行第$j$列时能得到的最大价值显然$f[i][j]=max(f[i-1][k]+v[i][j]),( max(0,j ...

  10. 三个键print scroll、pause

    上班族或是办公室白领每天都几乎跟键盘打交道, 那么键盘上的PrtSc SysRq(print screen).Scroll Lock.se Break(pause break).numlock等有何作 ...