c语言堆排序代码
#include液戚stdio.h
丹阳网站制作公司哪家好,找创新互联建站!从网页设计、网站建设、微信开发、APP开发、响应式网站设计等网站项目制作,到程序开发,运营维护。创新互联建站从2013年成立到现在10年的时间,我们拥有了丰富的建站经验和运维经验,来保证我们的工作的顺利进行。专注于网站建设就选创新互联建站。
void shift(int a[] , int i , int m)
{
int k , t;
t = a[i]; k = 2 * i + 1;
while (k m)
{
if ((k m - 1) (a[k] a[k+1])) k ++;
if (t a[k]) {a[i] = a[k]; i = k; k = 2 * i + 1;}
else break;
}
a[i] = t;
}
void heap(int a[] , int n) //辩正a 为排序数组,n为数组大小(携埋悔编号0-n-1)
{
int i , k;
for (i = n/2-1; i = 0; i --) shift(a , i , n);
for (i = n-1; i = 1; i --)
{
k = a[0]; a[0] = a[i]; a[i] = k;
shift(a , 0 , i);
}
}
void main()
{
int a[10],i;
for(i=0;i10;i++)
scanf("%d",a[i]);
heap(a,10);
for(i=0;i10;i++)
printf("%d",a[i]);
}
数据结构的堆排序
堆排序(C语言版)2010-03-15 23:24/*简述:
所谓堆排序,就是就是将所要排序的数以二叉树的形式存储。其中,有根的元素值大于其孩子结点。一直递归下去,每当取出最大的元素,考量其左右子树毕碰,以保持其根节点最大的性质不变。这个算法的时间复杂性是O(n log2 n)。证明略。 */
#includestdio.h
#define max_size 10//数组元素个数
#includestdlib.h
int heap_size;//当前堆中的元素数目
void MAX_HEAPFY(int A[], int i) {
int left, right, temp, largest;
left = 2*i;//基庆
right = 2*i + 1;
if( left = heap_size A[i] A[left] )
largest = left;
else largest = i;
if( right = heap_size A[right] A[largest])
largest = right;
if(largest != i) {
temp = A[i];
A[i] = A[largest];
A[largest] = temp;
MAX_HEAPFY(A, largest);
}
}
void BUILD_MAX_HEAP(int A[]) {
//这个函数是用来产生最大堆的
int i;
heap_size = max_size-1;
for( i = (max_size-1)/2; i != 0; i--) {
MAX_HEAPFY(A, i);
printf("*****\n");
}
}
void HEAP_SORT(int A[]) {
int i, temp;
BUILD_MAX_HEAP(A);
for( i = (max_size-1); i != 1; i--) {
temp = A[1];
A[1] = A[i];
A[i] = temp;
--heap_size;
MAX_HEAPFY(A, 1);
}
}
int main()
{
int i;
int A[max_size];
for(i = 1; i != max_size; i++) {
A[i] = rand() % max_size;
printf("%5d", A[i]);
}
HEAP_SORT( A );
printf("搏数握\n\n");
for(i = 1; i != max_size; i++)
printf("%5d",A[i]);
system("PAUSE");
}
【急求】C语言中堆排序如何输出排序前各数字的序号?
最简单的办法:再增加一个数组int d0[13]={0,1,2,3,4,5,6,7,8,9,10,11,12}
当春虚交换data数组中data[i]和data[j]时,扒含燃同步地交换d0数组中d0[i]和d0[j]就可以了。这样当排序完成后,数老伏据data[k]的排序前序号就是d0[k]。
怎样用c语言中堆排序实现一个数组a[10]的排序
#include stdio.h
#include stdlib.h
#include string.h
int sort_function( const void *a, const void *b);
char list[5][4] = { "cat", "car", "cab", "cap", "can" };
int main(void)
{
int x;
qsort((void *)list, 5, sizeof(list[0]), sort_function); // 调用快速排序
for (x = 0; x 5; x++)
printf("%s\n", list[x]);
return 0;
}
int sort_function( const void *a, const void *b)
{ //自已要定义一个简单的比较函数就扒物兄可
return( strcmp((char *)a,(char *)b) );
}
// C++中自身有一个通用蚂轿的快速 qsort,可以用它 ,自已要定义一个简单的比春袭较函数就可
网页题目:堆排序函数c语言 堆排序c实现
网站地址:http://scgulin.cn/article/ddpedhs.html