堆排序函数c语言 堆排序c实现-成都快上网建站

堆排序函数c语言 堆排序c实现

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://kswjz.com/article/ddpedhs.html
扫二维码与项目经理沟通

我们在微信上24小时期待你的声音

解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流