#include <stdio.h>
#include <stdlib.h>
#include <windows.h>
void swap(int *arr,int a,int b){
int temp=arr[a];
arr[a]=arr[b];
arr[b]=temp;
int j=2*i + 1;
while(j<n){
if(j+1 < n && arr[j]>arr[j+1]){
j++;
}
if(arr[i] < arr[j]){
break;
}
swap(arr,i,j);
i=j;
j=2*i + 1;
}
}
int i=0;
for(i=n/2-1;i>=0;i--){
adjustDown(arr,i,n);
}
}
void HeapSort(int *arr,int n){
int i=0;
makeHeap(arr,n);
}
}
void main(){
int a[20]={10,3,3,20,8,9,30,4,50,12,14,7,2,60,3,80,100,9,4,2};
//int a[8]={10,3,3,20,8,9,30,4};
int len = 20;
HeapSort(a,len);
for(int i=0;i<len;i++){
printf("%d,",a[i]);
}
Sleep(15000);
}
#include <stdlib.h>
#include <windows.h>
void swap(int *arr,int a,int b){
int temp=arr[a];
arr[a]=arr[b];
arr[b]=temp;
}
//按大小调整父子节点位置
int j=2*i + 1;
while(j<n){
if(j+1 < n && arr[j]>arr[j+1]){
j++;
}
if(arr[i] < arr[j]){
break;
}
swap(arr,i,j);
i=j;
j=2*i + 1;
}
}
//初始建堆
int i=0;
for(i=n/2-1;i>=0;i--){
adjustDown(arr,i,n);
}
}
void HeapSort(int *arr,int n){
int i=0;
makeHeap(arr,n);
for(i=n-1;i>0;i--){
//交换堆顶和末尾元素
swap(arr,0,i);
//交换后剩余的堆在进行调整,以满足堆的特性
}
}
void main(){
int a[20]={10,3,3,20,8,9,30,4,50,12,14,7,2,60,3,80,100,9,4,2};
//int a[8]={10,3,3,20,8,9,30,4};
int len = 20;
HeapSort(a,len);
for(int i=0;i<len;i++){
printf("%d,",a[i]);
}
Sleep(15000);
}