首页 > 其他分享 >堆排序

堆排序

时间:2022-12-23 21:11:13浏览次数:39  
标签:typedef int HeapType 堆排序 elem HeapAdjust now

本题要求实现堆排序中的筛选函数,待排序列的长度1<=n<=1000。

函数接口定义:

1 void HeapAdjust( HeapType  H, int s, int m);

其中L是待排序表,使排序后的数据从小到大排列。
###类型定义:

typedef  int  KeyType;
typedef  struct {                      
  KeyType *elem; /*elem[0]一般作哨兵或缓冲区*/                       
  int Length;      
}SqList;
typedef SqList HeapType; 

裁判测试程序样例:

 1 #include<stdio.h>
 2 #include<stdlib.h>
 3 typedef  int  KeyType;
 4 typedef  struct {                      
 5   KeyType *elem; /*elem[0]一般作哨兵或缓冲区*/                       
 6   int Length;      
 7 }SqList;
 8 typedef SqList HeapType; 
 9 void  CreatSqListHeapType *L);/*待排序列建立,由裁判实现,细节不表*/ 
10 void HeapAdjust( HeapType  H, int s, int m);
11 void HeapSort( HeapType  H);
12 int main()
13 {
14   HeapType L;
15   int i;
16   CreatSqList(&L);
17   HeapSort(L);
18   for(i=1;i<=L.Length;i++)
19    {        
20      printf("%d ",L.elem[i]);
21    }
22   return 0;
23 }
24 void HeapSort( HeapType  H)
25 { /*堆顺序表H进行堆排序*/
26   int i; KeyType rc;
27   /*建立初始堆*/
28   for( i=H.Length/2;i>0; i--)
29    {
30       HeapAdjust(H, i, H.Length);
31    }
32   for(i=H.Length;i>1;i--)
33    {
34       rc=H.elem[1];
35       H.elem[1]=H.elem[i]; 
36       H.elem[i]=rc;
37       HeapAdjust(H, 1, i-1); 
38    }
39  }
40 /*你的代码将被嵌在这里 */

代码如下:

void HeapAdjust( HeapType  H, int s, int m){
    int now=s;
    if(s*2<=m&&H.elem[s*2]>H.elem[now]){
        now<<=1;
    }
    if(s*2+1<=m&&H.elem[s*2+1]>H.elem[now]){
        now=s*2+1;
    }
    if(now!=s){
        int t=H.elem[s];
        H.elem[s]=H.elem[now];
        H.elem[now]=t;
        HeapAdjust(H,now,m);
    }
}

 

标签:typedef,int,HeapType,堆排序,elem,HeapAdjust,now
From: https://www.cnblogs.com/psh888/p/17001646.html

相关文章

  • 【算法实践】他山之石,可以攻玉--利用完全二叉树快速实现堆排序
    前言什么是堆堆是一种数据结构,它是完全二叉树或者是近似完全二叉树的一种数据结构,树中每个结点的值都不小于(或不大于)其左右孩子结点的值。何为完全二叉树完全二叉树是一种......
  • 堆排序
    堆排序时间复杂度:O(logn)先创建一个堆,然后调整堆,调整过程是将节点和子节点进行比较,将其中最大的值变为父节点,递归调整调整次数lgn,最后将根节点和尾节点交换再n次调整O(n......
  • HeapSort堆排序原理与实现
    HeapSort堆排序原理与实现  堆排序是比较重要的数据结构,其主要优点是通过排序二叉树的特性能够记录每个数之间的大小关系,以至于不需要重复比较,对于海量数据排序问题可以减......
  • 选择排序(简单选择排序,堆排序)
    学习时间2022.12.17选择排序基本概念简单选择排序第1次,遍历整个数组,找到最小的数字,将其与第一位进行调换;第2次,遍历除以排序好的第1个数,遍历后面所有数字,找到最小的,与......
  • Go-堆排序
    packagemainimport"fmt"funcHeapSort(arr[]int)[]int{length:=len(arr)fori:=0;i<length;i++{lastmesslen:=length-i//......
  • 堆排序heapSort_legend
    堆排序:(一)定义:从小到大排序则构建一个最大堆;从大到小排序,则构建一个最小堆。(二)思想:1.先建立一个最大堆;2.然后将最大堆的堆顶元素(0号元素,最大值)与堆的最后一个元素(n-1号......
  • 堆排序
    比较常见的排序方法,见例题:本题要求实现堆排序中的筛选函数,待排序列的长度1<=n<=1000。函数接口定义:voidHeapAdjust(HeapTypeH,ints,intm);其中L是待排序表,使排......
  • 堆排序
    输入一个长度为 n 的整数数列,从小到大输出前 m 小的数。#include<iostream>usingnamespacestd;constintN=1e5+10;intn,m,len;inth[N];voiddown......
  • 与堆和堆排序相关的问题
    与堆和堆排序相关的问题作者:Grey原文地址:博客园:与堆和堆排序相关的问题CSDN:与堆和堆排序相关的问题堆结构说明堆结构就是用数组实现的完全二叉树结构,什么是完全二叉......
  • 堆排序算法
    堆排序算法堆排序定义:堆排序是将一组无序数组(二叉树)构建成一个堆,分为大顶堆和小顶堆大顶堆:父节点的值永远大于其左子树和右子树的值堆排序思路:将堆顶元素与末尾元......