连着写堆排序写两次,两次都有错

本文深入探讨了堆排序算法的原理与实现细节,通过C和Java两种语言的代码示例,展示了如何创建最大堆和最小堆,并进行堆排序。文章详细解释了调整堆结构的过程,包括父子节点的交换条件,帮助读者理解并掌握堆排序的核心概念。

第一次:是没注意到线下比较的时候起始节点也会边

#include<stdio.h>
void swap(int&a,int&b){
	int temp=a;
	a=b;
	b=temp;
}
void creatheap(int *data,int n){
	for(int i=(n-2)/2;i>=0;i--){
		for(int j=i;2*j+1<=n-1;){
			j=2*j+1;
			if(j+1<n&&data[j]>data[j+1]) j++;
			if(data[(j-1)/2]>data[j]) {//注意这里是哪两个的值互换,第一次是i与j,第二次呢? 
				swap(data[(j-1)/2],data[j]); 
			}
		}
	
	}
}
int main(){
	int n;
	scanf("%d",&n);
	int data[n];
	for(int i=0;i<n;i++){
		scanf("%d",&data[i]);
	}
	creatheap(data,n);
	for(int i=0;i<n;i++) printf("%d ",data[i]);

	return 0;
}

第二次:

import java.util.Scanner;

public class Main {
	private static int times = 0;

	public static void main(String[] args) {
		Scanner in = new Scanner(System.in);
		int n = in.nextInt();
		int[] data = new int[n];
		for (int i = 0; i < n; i++) {
			data[i] = in.nextInt();
		}
		heap(data,n);
		for(int i=0;i<n;i++) System.out.print(data[i]+" ");
	}

	public static void heap(int[] data, int n) {
		for (int i = (n - 2) / 2; i >= 0; i--) {
			for (int j = i; j * 2 + 1 < n;) {
				j = 2 * j + 1;
				if (j + 1 < n && data[j + 1] < data[j])
					j++;
				if (data[j] < data[(j - 1) / 2]) {
					int temp = data[j];//不要小看这个转换值,不认真也会错
					 data[j]=data[(j - 1) / 2];
					 data[(j - 1) / 2]=temp;
				}else break;
			}
		}
	}
}

### 连续两次浪涌测试的方法与工具 浪涌测试是一种用于评估电子设备抗干扰能力的重要手段,尤其是在汽车电子领域或其他高可靠性需求的应用中。以下是关于连续两次浪涌测试的相关方法和工具: #### 测试标准 浪涌测试通常遵循国际电工委员会(IEC)的标准 IEC 61000-4-5 或 AEC-Q200 认证中的相关规定[^1]。这些标准定义了浪涌电压的波形参数、幅值范围以及测试条件。 #### 方法描述 为了模拟实际环境中可能出现的多次瞬态过电压事件,在进行连续两次浪涌测试时需注意以下几点: - **时间间隔设置**:根据具体应用场景设定两次脉冲之间的时间差。一般情况下,该时间间隔可以从毫秒级到几秒钟不等。 - **极性和幅度控制**:第一次浪涌可能是正向峰值电流,而第二次则可以调整为反向或者保持相同方向但改变大小来验证双向保护电路的有效性。 - **重复次数记录**:除了仅执行两轮外还需考虑更多次序贯操作的影响以便全面了解产品长期稳定性表现如何应对频繁突变输入信号的情况。 #### 使用工具 实施此类复杂电气特性的测量离不开专业的实验装置,主要包括但不限于以下几个方面: - **浪涌发生器**:能够精确生成符合所需规格要求的各种形式冲击波形,并允许灵活配置各项参数如上升沿陡度、持续周期长度等等特性。 - **数据采集系统**:配合高速ADC模数转换模块实时监控被测对象在整个过程里的响应变化曲线并存储下来供后续分析之用。 ```python import time from surge_generator import SurgeGenerator def dual_surge_test(device_under_test, interval=1): generator = SurgeGenerator() # First Surge Positive Polarity generator.set_parameters(amplitude=2kV, polarity='positive') device_under_test.apply(generator.generate()) # Wait Interval Between Surges time.sleep(interval) # Second Surge Negative Polarity generator.set_parameters(amplitude=-2kV, polarity='negative') device_under_test.apply(generator.generate()) dual_surge_test(my_device) ```
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值