C++堆排序算法的实现方法_C 语言

 本文探察说明了C++了解堆排序算法的方式,信任在起功能的每个努力数据构造与算法会起到必然的帮忙功能。具体的内容如次:

 率先,鉴于堆排序算法说起来比拟长,因而在这点上独立谈谈。。堆排序是一种树形选择排序方式,它的特色是:在排序颠换,l被数数两个往事构造的独身使整合的次。,在独身使整合的父植物的节和子植物的节私下的内在相干,在现在的混乱中选择中枢词的最大(或最小)元素。

一、堆的清晰度

堆的清晰度如次:n中枢词序列L适宜一堆,假定序列满足的:
①L(i) <= L(2i)和L(我) <= L(2i+1)  或者  ②L(i) >= L(2i)和L(我) >= L(2i+1)   属于[ 1我, n/2]。

满足的第①种处境的堆称为小根堆(小顶堆),使发誓某事属实的证据二满足的堆叫根堆(heap的顶部)。在根桩,最大的元素往事在根植物的节中。,且对任一非根结,其值没有或相同的人它的父植物的节的值。相反的小堆,一小堆往事根植物的节的最小元素。譬如,{ 16, 14, 10, 8, 7, 9, 3, 2 }树根桩说。:

                                 

二、初始堆栈构造

堆排序的中枢执意初始堆栈构造。两个树击中要害结n,顶点独身植物的节是在N / 2(下至取整)的子植物的节。因而初始堆栈构造的议事程序是:N / 2(下至取整)为每建造抑制器的植物的节(在根桩使发誓某事属实的证据,大他的植物的节没有约在中枢词的孩子,作物物交换),使子树的一堆。革囊后从N / 2-1翻开1植物的节的每建造抑制器,植物的节的值大于子植物的节的值,若不是,在更大的涵义和作物物交换的孩子,作物物交换后可以在一堆残害,照着,持续在堆构造下应用上述的方式。,直到该植物的节的子树的根的独身堆为止。采取以上所述方式累次装饰堆桩破土,直到根植物的节。

从0开端的部署兵力下标,照着,堆中i的左植物的节是2×i 1。,对孩子2 *我 2。以下是独身植物的节,将了解我下至装饰算法创立R:

void AdjustDown(ElementType A[], int i, int Len) 
{ 
  ElementType temp = 独身[我] // 暂时的独身[我] 
   
  为(int largest=2*i+1; largest独身[大] 
      ++largest;     // 假定对孩子大 
    假定(高烧 < 独身[大] 
    { 
      独身[我] = A[largest]; 
      i = largest;     // 记录作物物交换后的位置 
    } 
    else 
      break; 
  } 
  独身[我] = temp;  // 被筛选结的值放入最终位置 
} 

 

建堆,从N / 2(下至取整)为1的植物的节下至装饰,天生的,因部署兵力下标从0开端,因而:

void BuildMaxHeap(ElementType A[], int Len) 
{ 
  为(int i=len/2-1; i>=0; --i) // 从我= N / 2-1 0,累次装饰堆 
    AdjustDown(A, i, Len); 
} 

三、堆排序

初始堆栈构造成晚年的,堆排序的思惟很简略:第独身将往事在L n n中,构成初始堆栈元素。,鉴于桩它本身的特色(大根桩为例,堆栈的顶部是最大的元素。出口栈元素,通常底元素发送到堆的顶部,在这个时候,根植物的节令人不满的事物的大根天生的他,堆被残害。在这点上,堆的顶部元素下至装饰,庶乎,栈顶,而且出口元素。同样反复,直到有堆中只剩整体的。算法如次:

void HeapSort(ElementType A[], int n) 
{ 
  BuildMaxHeap(A, n);    // 堆的初始新生事物 
  为(int i=n-1; i>0; --i) // n-1次作物物交换颠换  
  { 
    // 堆顶元素的最大出口(和基数的作物物交换) 
    [ 0 ] = [ 0 ]^独身[我] 
    独身[我] = [ 0 ]^独身[我] 
    [ 0 ] = [ 0 ]^独身[我] 
    // 装饰,拾掇剩的n-1个元素 
    AdjustDown(A, 0, i);   
  } 
} 

四、机能剖析

工夫错综复杂的状态:的下至装饰的工夫和殿下,为O(h)。可以使发誓n个发展击中要害元素号码在构造上。,其工夫错综复杂的状态为O(n)。而且有n-1次下至装饰动手术,每回装饰工夫是O(h),故在最好,最差和平常的,工夫的堆排序算法的复合物为O(nlogn)。

空隙错综复杂的状态:只应用独身不变的事物的附带合适的,空隙错综复杂的状态为O(1)。

稳定性:不稳定的。

发表评论

电子邮件地址不会被公开。 必填项已用*标注