⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 heapsort.c

📁 用于学术研究的FPGA布局布线软件VPR
💻 C
字号:
#include "heapsort.h"/******************* Subroutines local to heapsort.c ************************/static void add_to_sort_heap(int *heap,			     float *sort_values,			     int index,			     int heap_tail);static int get_top_of_heap_index(int *heap,				 float *sort_values,				 int heap_tail);/********************* Subroutine definitions *******************************/voidheapsort(int *sort_index,	 float *sort_values,	 int nelem){/* This routine loads sort_index [1..nelem] with nelem values:  the indices  * * of the sort_values [1..nelem] array that lead to sort_values[index] being * * decreasing as one goes through sort_index.  Sort_values is not changed.   */    int i;/* Build a heap with the *smallest* element at the top. */    for(i = 1; i <= nelem; i++)	add_to_sort_heap(sort_index, sort_values, i, i);/* Now pull items off the heap, smallest first.  As the heap (in sort_index) * * shrinks, I store the item pulled off (the smallest) in sort_index,        * * starting from the end. The heap and the stored smallest values never      * * overlap, so I get a nice sort-in-place.                                   */    for(i = nelem; i >= 1; i--)	sort_index[i] = get_top_of_heap_index(sort_index, sort_values, i);}static voidadd_to_sort_heap(int *heap,		 float *sort_values,		 int index,		 int heap_tail){/* Adds element index, with value = sort_values[index] to the heap.          * * Heap_tail is the number of elements in the heap *after* the insert.       */    unsigned int ifrom, ito;	/* Making these unsigned helps compiler opts. */    int temp;    heap[heap_tail] = index;    ifrom = heap_tail;    ito = ifrom / 2;    while(ito >= 1 && sort_values[heap[ifrom]] < sort_values[heap[ito]])	{	    temp = heap[ito];	    heap[ito] = heap[ifrom];	    heap[ifrom] = temp;	    ifrom = ito;	    ito = ifrom / 2;	}}static intget_top_of_heap_index(int *heap,		      float *sort_values,		      int heap_tail){/* Returns the index of the item at the top of the heap (the smallest one).  * * It then rebuilds the heap.  Heap_tail is the number of items on the heap  * * before the top item is deleted.                                           */    int index_of_smallest, temp;    unsigned int ifrom, ito, heap_end;    index_of_smallest = heap[1];    heap[1] = heap[heap_tail];    heap_end = heap_tail - 1;	/* One item deleted. */    ifrom = 1;    ito = 2 * ifrom;    while(ito <= heap_end)	{	    if(sort_values[heap[ito + 1]] < sort_values[heap[ito]])		ito++;	    if(sort_values[heap[ito]] > sort_values[heap[ifrom]])		break;	    temp = heap[ito];	    heap[ito] = heap[ifrom];	    heap[ifrom] = temp;	    ifrom = ito;	    ito = 2 * ifrom;	}    return (index_of_smallest);}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -