#include <stdlib.h>
#include <stdio.h>
typedef int Item;
#define key(A) (A)
#define less(A, B) (key(A) < key(B))
#define exch(A, B) {Item t = A; A = B; B = t;}
#define compexch(A, B) if(less(B,A)) exch(A,B)
// 注意在宏函数这里实际是不做任何执行的,只是替换而已
static Item *pq;
static int N;
void init(int maxN){
pq = malloc(sizeof(Item));
N = 0;
}
int empty(){
return N == 0;
}
void insert(Item v){
//pq[N++] = v;
// 注意这里上下两种表达是等价的,pq是指针的话,pq+N 等于pq(它是一个地址)+N*sizeof(Item)的地址
*(pq+N) = v;
N++;
}
Item delMax(){
int j;
int max = 0;
for(j=0; j<N; j++){
if(less(pq[max], pq[j])){
max = j;
}
}
exch(pq[max], pq[N-1]);
// 下面两种表达等价的
N--;
return *(pq+N);
//return pq[--N];
}
void PQsort(Item a[], int l, int r){
int k;
init(r);
for(k = 0; k <= r; k++){
insert(a[k]);
}
for(k = r; k >= 0; k--){
a[k] = delMax();
}
}
void main(int argc, char* argv[]){
int i;
int N = atoi(argv[1]);
int* a = malloc(N*sizeof(int));
for(i=0; i<N; i++){
a[i] = rand()%1000;
printf("%d ", a[i]);
}
printf("\n");
PQsort(a, 0, N-1);
for(i=0; i<N; i++){
printf("%d ", a[i]);
}
printf("\n");
}
算法c语言实现 9-2 优先队列排序
最新推荐文章于 2023-07-11 23:24:35 发布