#include <stdio.h>
void info(int A[], int len) {
int i;
for (i = 0; i < len; i++)
printf("%d ", A[i]);
printf("\n");
}
void swap(int *a, int *b) {
int temp = *a;
*a = *b;
*b = temp;
}
void max_heapify(int A[], int i, int len) {
int largest;
int left = ((i+1) << 1) - 1;
if (left < len && A[left] > A[i])
largest = left;
else
largest = i;
int right = (i+1) << 1;
if (right < len && A[right] > A[largest])
largest = right;
if (largest != i) {
swap(&A[i], &A[largest]);
max_heapify(A, largest, len);
}
}
void build_max_heap(int A[], int len) {
int i;
for (i = len/2 - 1; i >= 0; i--)
max_heapify(A, i, len);
}
void heapsort(int A[], int len) {
int i;
build_max_heap(A, len);
for (i = len - 1; i >= 1; i--) {
swap(&A[0], &A[i]);
max_heapify(A, 0, i);
}
}
void test(int A[], int len) {
heapsort(A, len);
info(A, len);
}
int main(int argc, const char *argv[]) {
int a3[] = {1, 10, 7};
test(a3, 3);
int a5[] = {1, 10, 6, 20, 9};
test(a5, 5);
int a6[] = {12, 23, 2, 20, 100, 4};
test(a6, 6);
return 0;
}
分享到:
相关推荐
《C高级主题:数据结构核心概念》这本书深入探讨了任何有志于成为程序员的人应该掌握的概念。书中涵盖了排序、搜索、合并、递归、随机数及模拟等多种主题。当读者学会如何操作灵活且广泛应用的数据结构,例如二叉树...
Series: Expert's Voice in C Paperback: 312 pages Publisher: Apress; 1 edition (October 29, 2013) Language: English ISBN-10: 1430264004 ISBN-13: 978-1430264002 C is the most widely used programming ...
《Advanced Topics in C》还将涉及一些高级排序方法,例如堆排序(heapsort)、快速排序(quicksort)和归并排序(mergesort)。通过学习如何使用C语言实现上述内容,读者将会对C语言有一个更加深入的理解和掌握。...
The column also uses sort.c (Column 11) for heapsort. Column 15: Strings wordlist.cpp -- List words in the file, using STL set. wordfreq.cpp -- List words in the file, with counts, using STL map. ...
堆排序(HeapSort) 快速排序(QuickSort) 锦标赛排序(Tournament) (3)其他 快速地址排序(QkAddrst) 基数排序(RadixSort) 13. 外部排序 (1)多路平衡归并排序(K-Merge) (2)置换-选择排序...
用C实现的数据结构和算法在这里,您会发现一些用C语言实现的数据结构和算法。这些算法主要基于Thomas H. Cormen撰写的《算法简介》一书。指示每个模块至少包含一个头文件(.h)和一个包含代码主体(.c)的源文件。 ...
根据提供的文件信息,本文将详细介绍该C语言程序中所实现的六种排序算法:直接插入排序、希尔排序、起泡排序、快速排序、直接选择排序以及堆排序。 ### 1. 直接插入排序(Insertion Sort) 直接插入排序是一种简单...
Chapter 6 - Heapsort Chapter 7 - Quicksort Chapter 8 - Sorting in Linear Time Chapter 9 - Medians and Order Statistics Part III - Data Structures Chapter 10 - Elementary Data Structures ...
"In light of the explosive growth in the amount of data and the diversity of computing applications, efficient algorithms are needed now more than ever. This beautifully written, thoughtfully ...
Chapter 6 - Heapsort Chapter 7 - Quicksort Chapter 8 - Sorting in Linear Time Chapter 9 - Medians and Order Statistics Part III - Data Structures Chapter 10 - Elementary Data Structures ...
Chapter 6 - Heapsort Chapter 7 - Quicksort Chapter 8 - Sorting in Linear Time Chapter 9 - Medians and Order Statistics Part III - Data Structures Chapter 10 - Elementary Data Structures ...
Chapter 6 - Heapsort Chapter 7 - Quicksort Chapter 8 - Sorting in Linear Time Chapter 9 - Medians and Order Statistics Part III - Data Structures Chapter 10 - Elementary Data Structures ...
堆排序(HeapSort) 快速排序(QuickSort) 锦标赛排序(Tournament) (3)其他 快速地址排序(QkAddrst) 基数排序(RadixSort) 13. 外部排序 (1)多路平衡归并排序(K-Merge) (2)置换-选择排序...
Chapter 6 - Heapsort Chapter 7 - Quicksort Chapter 8 - Sorting in Linear Time Chapter 9 - Medians and Order Statistics Part III - Data Structures Chapter 10 - Elementary Data Structures ...
l The Role of Algorithms in Computing 5 l.l Algorithms 5 l.2 Algorithms as a technology 10 2 Getting Started I5 2.l Insertion sort 15 2.2 Analyzing algorithms 21 2.3 Designing algorithms 27 3 Growth ...
arr <- c(12, 11, 13, 5, 6, 7) print("原始数组:", arr) heapSort(arr) print("排序后的数组:", arr) ``` 这个示例首先定义了`heapify`函数用于调整堆,`heapSort`函数实现了整个排序过程,`swap`函数则用于交换...