小小的注意点们

  • 交换两个变量的值时, 如果使用异或运算符, 需要先判断两个数是否相等
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. 免费证书申请——Let's Encrypt的申请与应用(IIS,Tomcat)

    环境 Windows Server 2008 R2 Tomcat 8.5.31 JDK8 利用IIS+letsencrypt-win-simple.V1.9.1申请免费SSL证书 新建一个IIS空网站 ...

  2. dubbo事件通知机制 (2)

    此文已由作者赵计刚授权网易云社区发布. 欢迎访问网易云社区,了解更多网易技术产品运营经验. 142      * 反射执行xxxService.onthrow方法:至少要有一个入参且第一个入参类型为T ...

  3. 正经学C#_变量与其数据类型:《c#入门经典》

    这一篇总结以下变量与其数据类型. 变量:在c#中指 某一个值或者数据存储在变量中,并且可以取出或者查看.变量不仅仅是一种,也有很多种,细分而言就是类型.泛指就是变量.如果是要是使用变量就要 声明变量, ...

  4. H5教程(二),CSS入门(一)选择器

    这是我的第二篇博客,H5教程CSS入门,适合刚开始学习H5的新手,让我们共同进步. 1.  CSS简介 1.1  CSS是什么? CSS称为样式层叠表,是用于增强或控制网页样式,并允许将样式信息与网页 ...

  5. SP16549 QTREE6 - Query on a tree VI LCT维护颜色联通块

    \(\color{#0066ff}{ 题目描述 }\) 给你一棵n个点的树,编号1~n.每个点可以是黑色,可以是白色.初始时所有点都是黑色.下面有两种操作请你操作给我们看: 0 u:询问有多少个节点v ...

  6. CGContext ----生成图片--image

    //获取图片 + (UIImage*) getImageWithColor:(UIColor*)color andHeight:(CGFloat)height { CGRect r= CGRectMa ...

  7. Nginx01---简单使用

    基于腾讯云--ubuntu系统 1.安装nginx sudo apt-get install nginx 2.启动,停止nginx nginx -c /usr/local/nginx/conf/ngi ...

  8. The requested profile "account" could not be activated because it does not exist 无法maven install的 解决办法,勾选红框选择的选项即可

  9. hdu2064 汉诺塔Ⅲ(递归)

    汉诺塔III Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Subm ...

  10. BeautifulSoup4模块的使用

    1. 安装 pip3 install beautifulsoup42. 使用 from bs4 import BeautifulSoup obj = BeautifulSoup("HTML内 ...