`
chiyx
  • 浏览: 273577 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

常用排序算法的实现(C语言版)-堆排序

阅读更多
堆排序:
/**
*排序过程中使用到的堆的结构
*/
typedef struct heap {
	int heapSize;
	int *ap;
	int apLength;
} Heap;

/*
*调整i位置上的元素,以保持最大堆的性质
*/
void maxHeapify(int a[], int i, int hSize) {
	int l, r, largest;
	l = 2 * i + 1;
	r = l + 1;

	if (l < hSize && a[l] > a[i]) {
		largest = l;
	} else {
		largest = i;
	}

	if (r < hSize && a[r] > a[largest]) {
		largest = r;
	}

	if (largest != i) {
		swap(a, i, largest);
		maxHeapify(a, largest, hSize);
	}
}

/*
*构建最大堆
*/
Heap buildMaxHeap(int a[], int n) {
	Heap hp;
	int i;

	hp.ap = a;
	hp.heapSize = n;
	hp.apLength = n;

	for (i = n / 2 - 1; i >= 0; i--) {
		maxHeapify(a, i, n);
	}
	return hp;
}

/*
*堆排序算法
*/
void heapSort(int a[], int n) {
	int i;
	//build max-heap
	Heap heap = buildMaxHeap(a, n);

	for (i = n - 1; i > 0 ; i--) {
		swap(a, i , 0);
		heap.heapSize--;
		maxHeapify(a, 0, heap.heapSize);
	}

}
1
0
分享到:
评论

相关推荐

    几种常用排序算法的C语言实现

    一些常用排序算法的C语言实现,包括直接选择排序,希尔排序,直接插入排序,快速排序,归并排序,冒泡排序,堆排序

    C++实现常用排序算法(快速,归并,选择,谢尔,堆排序)

    C++实现常用排序算法 (快速,归并,选择,谢尔,堆排序)

    常用排序算法C语言示例代码解说PDF

    个人原创总结的常用排序算法C语言示例代码解说PDF,可以动态输出排序过程,以便理解排序算法的主旨思想。包含有直接插入排序,折半插入排序,2路直接插入排序,起泡排序,简单选择排序,快速排序,堆排序,(希尔排序,归并...

    用C语言实现常用排序算法

    利用随机函数产生30000个随机整数,利用插入排序、起泡排序、选择排序、快速排序、堆排序、归并排序等排序方法进行排序,并且 (1) 统计每一种排序上机所花费的时间。 (2) 统计在完全正序,完全逆序情况下记录的比较...

    内部排序算法比较,C语言

    要求对以下6种常用的内部排序算法进行比较:起泡排序、直接插入排序、简单选择排序、快速排序、希尔排序、堆排序。待排序表的表长不小于1000;其中的数据要用伪随机数产生程序产生,至少要用5组不同的输入数据作比较...

    常用排序算法的C语言版实现示例整理

    基本的排序算法有如下几种:交换排序(冒泡排序、快速排序)、选择排序(直接选择排序、堆排序)、插入排序(直接插入排序、希尔排序)、归并排序、分配排序(基数排序、箱排序、计数排序)。下面依次列出各种算法的...

    C语言常用排序原理和算法全解

    C语言常用排序全解:选择排序,直接插入排序,冒泡排序,希尔排序,快速排序,堆排序,渗透建堆,堆排序

    C语言进阶-牟海军.pdf

    简介: C语言是编程语言中的一朵奇葩,虽已垂垂老矣,但却屹立不倒,... 时间复杂度、冒泡排序法、选择排序法、快速排序法、归并排序法、顺序排序法、二分查找等常用算法的详细讲解;  良好的编码习惯和编程风格。

    算法精解-c语言描述

    本书的众多特色使得它在同类书中独树一帜:具体实现都采用正式的C语言代码而不是伪代码,在很多数据结构和算法的实现过程中,有大量细节问题是伪代码不能解决的;每一章都有精心组织的主题和应用;全部示例来自真实...

    几种常用的排序算法的C/C++实现

    几种常见的排序算法的C语言实现。分为三个步骤,1是自动生成待排序数组,2是几种常见的排序算法(有直接插入排序,冒泡排序,选择排序,shell排序,快速排序,堆排序),及其排序之后的验证(3). 用VC++6.0打开编译...

    一些常用的排序算法完整代码

    一些常用的排序算法完整代码 用C语言 写的 快速排序 堆排序啊 等等

    算法精解:C语言描述

    所有的代码都包含大量注释……《算法精解:C语言描述》内容包括:数据结构和算法的概念,以及使用它们的原因和意义 指针和递归算法分析常用数据结构:链表、栈、队列、集合、哈希表、树、堆、优先级队列以及图排序和...

    C语言常用排序方法大全

    稳定排序和非稳定排序 内排序和外排序 选择排序 直接插入排序 冒泡排序 希尔排序 快速排序 堆排序等

    C语言常用排序大全_附带源码

    常用排序算法: 1,冒泡排序 2,选择排序 3,插入排序 4,快速排序 5,希尔排序 6,堆排序 以上排序代码都在经过实际测试。

    算法精解(C语言描述)Kyle Loudon 机械工业出版

    本书的众多特色使得它在同类书中独树一帜:具体实现都采用正式的C语言代码而不是伪代码,在很多数据结构和算法的实现过程中,有大量细节问题是伪代码不能解决的;每一章都有精心组织的主题和应用;全部示例来自真实...

    算法精解:C语言描述 PDF

    算法精解:C语言描述》是数据结构和算法领域的经典之作,十余年来,畅销不衰!全书共分为三部分:部分首先介绍了数据结构和算法的概念,以及使用它们的原因和意义,然后讲解了数据结构和算法中最常用的技术——指针...

    算法精解.C语言描述

    《算法精解:C语言描述》是数据结构和算法领域的经典之作,十余年来,畅销不衰!全书共分为三部分:部分首先介绍了数据结构和算法的概念,以及使用它们的原因和意义,然后讲解了数据结构和算法中最常用的技术——...

    内部排序算法比较

    本程序实现了六种常用的内部排序算法(冒泡排序,插入排序,选择排序,希尔排序,快速排序和堆排序),通过随机生成数据对各个排序算法的比较次数和交换次数进行比较。

    算法精解:C语言描述中文版(高清)

    本书是数据结构和算法领域的经典之作,十余年来,畅销不衰!全书共分为三部分:第一部分首先介绍了数据结构...第三部分对排序、搜索数值计算、数据压缩、数据加密、图算法、几何算法等经典算法进行了精辟的分析和讲解。

    常用算法程序集(C语言描述)(第三版)+完整源代码

    常用算法程序集(C语言描述)(第三版) 清晰PDF版,配完整源代码。 第1章 多项式的计算 1.1 一维多项式求值 1.2 一维多项式多组求值 1.3 二维多项式求值 1.4 复系数多项式求值 1.5 多项式相乘 1.6 复系数多项式...

Global site tag (gtag.js) - Google Analytics