首页 > 其他分享 >code

code

时间:2024-11-19 19:41:56浏览次数:1  
标签:code int len high HeapDown low pivot

快速排序代码

https://www.acwing.com/problem/content/description/787/

void QuickSort(int q[], int low, int high) {
    // 递归的终止情况
    if (low >= high) return;
    
    // 第一步:分解为子问题
    int pivot = q[low+high>>1], i = low - 1, j = high + 1;
    while (i < j) {
        do ++ i; while (q[i] < pivot);
        do -- j; while (q[j] > pivot);
        if (i < j) swap(q[i], q[j]);
    }
    
    // 第二步:递归处理子问题
    QuickSort(q, low, j);
    QuickSort(q, j + 1, high);

    // 第三步:子问题合并.快排这一步不需要操作,但归并排序的核心在这一步骤
}

堆排序代码

https://www.acwing.com/problem/content/description/787/

#include <iostream>
using namespace std;

const int N = 1e5+10;

int q[N];
int len;

// u 需要往下 down 的节点,m 堆的右边界
void HeapDown(int s, int m) {
   int t = s;
   if (s*2<=m && q[s*2]>q[t]) t = s*2;
   if (s*2+1<=m && q[s*2+1]>q[t]) t = s*2+1;
   if (s != t) {
       swap(q[s], q[t]);
       HeapDown(t, m);
   }
}

int main() {
    cin >> len;
    for (int i = 1; i <= len; ++ i) cin >> q[i];
    
    // 初始化大根堆
    for (int i = len/2; i > 0; -- i) HeapDown(i, len);
    
    // 将堆顶记录逐个放到堆尾
    // 每放一个就需要调整堆,保证堆顶记录为堆中的最大值
    for (int i = len; i > 1; -- i) {
        swap(q[1], q[i]);
        HeapDown(1, i-1);
    }

    for (int i = 1; i <= len; ++ i) cout << q[i] << ' ';
    cout << endl;
    
    return 0;
}

标签:code,int,len,high,HeapDown,low,pivot
From: https://www.cnblogs.com/tamtam/p/18555465

相关文章

  • [Java] String的hashCode方法
    简述java/lang/String#hashCode是用途极广的方法,其源码实现也存在一定变迁。其位于JRE的rt.jar包内OpenJDKOpenJDK8-b120版~9-b00版:=OracleJDK1.8.0-261jdk/jdk/src/share/classes/java/lang/String.javahttps://github.com/openjdk/jdk/blob/jdk8-b120/......
  • Vscode Mingw64抢夺Python路径的解决方案
    VscodeMingw64抢夺Python路径的解决方案系统:Windows11时间:2024/11/19环境:Vscode:版本1.95.3   Python扩展:v2024.20.0   Mingw64:version5.2.37(1)-release(x86_64-pc-msys)说明首先说明一下什么叫抢夺路径:本人在今天再次运行一个此前运行过的python程序......
  • WasomCodeX试用-工程文件结构
    官方的Gitee提供了Tutorial程序供下载学习。打开后,可以看到程序结构。在这个程序里,可以看到从main主程序到各个FC都写在一个文件里。同时,通过终端查看下文件目录结构。/wasomeide_workspace/tutorials/projects/ch05-1$tree-l.├──ams_pack.log├──build│├......
  • AtCoder Beginner Contest 352 - VP记录
    A-AtCoderLine赛时整活想写异或版本的swap写错了还WA了一发。不过现在会写了:x^=y^=x^=y点击查看代码#include<cstdio>#include<algorithm>usingnamespacestd;intmain(){ intn,x,y,z; scanf("%d%d%d%d",&n,&x,&y,&z); if(x>y)swap(x,y); p......
  • Educational Codeforces Round 156 (Rated for Div. 2) - VP记录
    A.SumofThree枚举即可,是否可行只与\(a,b,c\)模三的余数有关,所以随便小范围枚举一下\(a,b\)就行了(只枚举\(1,2,3\)可能会因为两数相同而误判),这样最不容易错。点击查看代码#include<cstdio>usingnamespacestd;intmain(){ intT;scanf("%d",&T); while(T--) ......
  • 二分查找(折半查找)(内含CodeForces - 1760F )
    在数组中想要找到一个元素,我们最先想到的就是遍历数组,用if语句判断它们是否相等,但时间复杂度太高,我们也不想遍历数组中的每个元素,感觉太麻烦了。这时就可以用二分查找的方法:先将数组排序,然后不断折中数组,只需比较中值与目标值的大小,更新中值的大小就行了,这样可以大大减少时间......
  • LeetCode 1290[二进制链表转整数]
    题目链接LeetCode1290[二进制链表转整数]详情实例提示题解思路遍历链表,获取链表的值添加到容器内在容器内遍历值,由高位到地位遍历,为权重,然后算值代码/***Definitionforsingly-linkedlist.*structListNode{*intval;*ListNode*next;*......
  • WasomCodeX试用---Ubuntu20.04系统
    安装WasomeIDE下载安装包并解压可获得如下文件内容:/WasomeIDE$lscode_amd64.debiecc.img.tarinstall.shwebide.vsixheadersinstall_docker.shmoduleswebview-toolkit-ui.tar执行install.sh文件如果系统未安装vscode,则在执行install.sh时会......
  • [1078] To import an existing Python environment in Visual Studio Code (VSCode)
    ToimportanexistingPythonenvironmentinVisualStudioCode,followthesesteps:1.**OpenVisualStudioCode**.2.**OpentheCommandPalette**:  -Press`Ctrl+Shift+P`(Windows/Linux)or`Cmd+Shift+P`(macOS).3.**Searchforandselect"Python......
  • leetcode 31. 下一个排列 中等
    leetcode31.下一个排列看了题解的思路,用自己看得懂的方式写的代码 classSolution{public:voidreverse(intleft,intright,vector<int>&nums){for(inti=left,j=right;i<j;i++,j--)swap(nums[i],nums[j]);}voidne......