`
中国小虫
  • 浏览: 12507 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

排序-----堆排序2

c 
阅读更多
//-------堆排序---------//
void HeapAdjust(int *a, int i, int Length)
{
	int Child;
	int Temp;
	for (Temp = a[i]; 2 * i + 1 < Length; i = Child)
	{
		Child = 2 * i + 1;

		if (Child < Length - 1 && a[Child + 1] > a[Child])
		{
			++Child;
		}

		if (Temp < a[Child])
		{
			a[i] = a[Child];
		}
		else
		{
			break;
		}

		a[Child] = Temp;
	}
}

void HeapSort(int *a, int length)
{
	int i;
	int temp;

	for (i = length / 2 - 1; i >= 0; --i)
	{
		HeapAdjust(a, i, length);
	}

	for (i = length - 1; i > 0; --i)
	{
		temp = a[0];
		a[0] = a[i];
		a[i] = temp;

		HeapAdjust(a, 0, i);
	} 
}




int main()   
{   
    int *a;   
    int i, length;   
    int temp = 0;  
	
    printf("input :");   
    scanf("%d",&length);
	
    a = (int*) malloc((length+1) * sizeof(int));  
	
    printf("input %d Numble :", length);   

    for(i = 0; i < length; i++)   
    {   
        scanf(" %d", &a[i]);   
    }   
  
    HeapSort(a,length);  
	
    for(i = 0; i < length; i++)   
	{
        printf("%d ",a[i]);  
	}

    printf("\n");   
	return 1;
}


 

分享到:
评论

相关推荐

    堆排序详细图解(通俗易懂)+排序算法-堆排序(超详细)

    堆排序详细图解(通俗易懂)+排序算法----堆排序(超详细)堆排序详细图解(通俗易懂)+排序算法----堆排序(超详细)堆排序详细图解(通俗易懂)+排序算法----堆排序(超详细)堆排序详细图解(通俗易懂)+排序算法...

    堆与堆排序10堆排序-堆与堆排序10-从堆的定义可以看出,堆实质是满足如下性质的完全二叉树:二叉树中任一非叶子结点均小于(

    堆排序----堆与堆排序10-从堆的定义可以看出,堆实质是满足如下性质的完全二叉树:二叉树中任一非叶子结点均小于(大于)它的孩子结点

    最快的排序算法 谁才是最强的排序算法:快速排序-归并排序-堆排序,排序算法数据结构

    在实际应用中,快速排序的平均情况是最快的,但是堆排序的最坏情况是 O(nlogn) 的,这说明堆排序的时间复杂度是渐进最优的。但是,快速排序的实际执行时间却比堆排序更快,这是因为快速排序的 cache freundliness 比...

    堆排序--大顶堆排序

    堆排序--大顶堆排序 大顶堆排序是堆排序的一种,通过构建大顶堆来实现排序的过程。下面是对大顶堆排序的详细解释: 什么是大顶堆? 大顶堆是一种特殊的完全二叉树,它满足以下条件: * 对于每个非叶子节点,节点...

    堆排序-flash演示

    堆排序-flash演示 可自己输入数据............

    多线程排序---希尔排序、快速排序、堆排序

    本主题主要探讨了三种经典的排序算法——希尔排序、快速排序和堆排序,并在Java语言环境下通过多线程实现,以充分利用系统资源,提升排序性能。 希尔排序是一种基于插入排序的算法,由Donald Shell于1959年提出。它...

    VC++-----------堆排序

    堆排序是一种基于比较的排序算法,它利用了数据结构中的“堆”这一概念。在计算机科学中,堆通常被理解为一个完全二叉树,其中每个父节点的值都大于或等于(最大堆)或小于或等于(最小堆)其子节点的值。堆排序分为...

    堆排序----排序算法

    c语言实现堆排序。代码实现的是建立大根堆

    Java代码-排序-直接插入排序、希尔排序、直接选择排序、冒泡排序、堆排序、快速排序、归并排序中部分排序以及算法-贪心法

    Java代码-排序-直接插入排序、希尔排序、直接选择排序、冒泡排序、堆排序、快速排序、归并排序中部分排序以及算法-贪心法,大家可以将源码下载下来进行学习,附带着注释和解释,有不理解的可以找博主一起探讨,共同...

    常用排序算法--堆排序

    常用的排序算法--堆排序,通过创建堆的方法进行排序

    算法-理论基础- 排序- 堆排序(包含源程序).rar

    堆排序是一种基于比较的排序算法,它利用了数据结构中的“堆”这一概念。在计算机科学中,堆是一个近似完全二叉树的结构,并同时满足堆的性质:即子节点的键值或索引总是小于(或者大于)它的父节点。堆排序有两种...

    堆排序算法源代码

    堆排序是一种基于比较的排序算法,它通过构造一个大顶堆或小顶堆来实现排序。在本场景中,我们关注的是堆排序的源代码,它适用于openSUSE 11.4操作系统,并且是使用GCC version 4.5.1编译器编译的。在这个名为"sort...

    8.12-8.19-冒泡-选择-插入-希尔-快速-归并-基数-堆排序-排序算法Swift代码及UI演示

    8. 堆排序(Heap Sort):堆排序利用了堆这种数据结构,构建一个大顶堆或小顶堆,然后将堆顶元素与末尾元素交换,调整堆,再将末尾元素移除,重复这个过程。时间复杂度为O(n log n)。 这些排序算法的Swift实现提供...

    排序算法-堆排序

    堆排序是一种基于比较的排序算法,它通过构建一个大顶堆或小顶堆来实现排序。在计算机科学中,堆通常被理解为一种特殊的树形数据结构,满足堆的性质:父节点的值总是大于或等于(对于大顶堆)或小于或等于(对于小...

    C#实现堆排序-代码示例

    堆排序是一种基于比较的排序算法,它利用了堆这种数据结构的特性来达到排序的目的。在C#中,我们可以按照上述描述的四个步骤来实现堆排序。以下是详细的知识点解析: 1. **建立大根堆**: 大根堆是二叉堆的一种...

    内部排序-快速和堆

    快速排序和堆排序是两种非常重要的内部排序算法,在计算机科学中有着广泛的应用。它们都是基于比较的排序方法,但各自有着独特的实现策略和性能特点。 快速排序由C.A.R. Hoare在1960年提出,其核心思想是分治法。...

    C语言版的排序方法---堆排序.docx

    堆排序是一种基于比较的排序算法,它通过构建和维护一个最大堆或最小堆来实现排序。在C语言中,我们可以自定义函数来实现这个过程。下面是对标题和描述中涉及的堆排序知识点的详细说明: 1. **最大堆**:在堆排序中...

    各种排序算法,包括希尔算法,快速排序,堆排序-A variety of sorting algorithms, includin

    各种排序算法,包括希尔算法,快速排序,堆排序-A variety of sorting algorithms, including the Hill algorithm, quick sort, heap sort

    数据结构排序 堆排序

    数据结构排序 堆排序 堆排序是一种常用的排序算法,它使用大堆进行排序。下面是堆排序的详细知识点说明: 堆排序定义 堆排序是一种比较排序算法,它使用大堆(max heap)来对数组进行排序。堆排序的时间复杂度为O...

    排序方法之---堆排序

    堆排序是一种基于比较的排序算法,它利用了数据结构中的“堆”这一概念。在计算机科学中,堆是一个近似完全二叉树的结构,并同时满足堆的性质:即子节点的键值或索引总是小于(或者大于)它的父节点。堆排序有两种...

Global site tag (gtag.js) - Google Analytics