zoukankan      html  css  js  c++  java
  • 堆排序的数组实现代码

    /*堆排序数组实现*/
    #include <stdio.h>
    #include <stdlib.h>
    #define N 8
    #define M N+1
    /*队列*/ 
    int rear=N,front=(N+1)/2;//此处有N+1个已入队 
    void change(int *a,int *b)
    {
        int t;
        t=*a;
        *a=*b;
        *b=t;
    }
    /*调整*/
    void deal(int data[],int n)
    {
        int tag=1,parent;
        for(;tag;){
            tag=0;
            for(parent=front;parent;parent--)
            {
                if((parent*2+1<=rear)&&data[parent*2+1]>data[parent]){
                    change(&data[parent*2+1],&data[parent]);
                    tag=1;
                }
                if(data[parent*2]>data[parent]){
                    change(&data[parent*2],&data[parent]);
                    tag=1;
                }
            }//交换 
        }//判断是否没有交换 
    }
    /*堆排序*/ 
    void Sort(int data[],int n){
        int *a=(int *)malloc((n+1)*sizeof(int));
        int i,t;//中间变量 
        for(i=1;i<n+1;i++){
            a[i]=data[i-1];
        }//end for
        /*左子女为2n,右子女为2n+1*/
        while(rear-1){
            deal(a,rear);//调整 
            /*交换头与最后一个叶子*/ 
            change(&a[rear],&a[1]);
            rear--;//砍叶子
            front=rear/2; 
        }//while 排序过程
        for(i=0;i<n;i++){
            data[i]=a[i+1];
        }   
    }
    void prin(int data[],int n){
        int i;
        for(i=0;i<n;i++){
            printf("%5d",data[i]);
        }//end for
        putchar('
    ');
    } 
    int main(void)
    {
        int data[N]={1,3,5,7,2,4,6,8};
        Sort(data,N);
        prin(data,N);
        return 0;
    }
  • 相关阅读:
    golang交叉编译:Linux
    vmware共享文件夹
    虚拟机-Debian服务器配置
    day38--MySQL基础二
    day19-IO多路复用
    mysql 对时间的处理
    mysql 优化
    Linux性能查看
    day18-socket 编程
    JAVA 消耗 CPU过高排查方法
  • 原文地址:https://www.cnblogs.com/pzqu/p/9457652.html
Copyright © 2011-2022 走看看