堆排序c语言+自定义数字,“堆排序”问题——C语言实现

题目:堆排序实现

假设有一个数据类型为整型的一维数组A,A 中的数据元素呈无序状态,编写一个采用堆排序法将A中的数据元素按由小到大进行排序的程序。

完整代码

#include

int A[100];

//调整重建堆

void sift(int r[], int k, int n){

int i = k, j = 2 * i;

int temp = r[i];

while( j <= n ){

if( j

if( temp

r[i] = r[j];

i = j;

j = 2 * i;

}

else break;

}

r[i] = temp;

}

//堆排序

void HeapSort(int r[], int n){

int i, temp;

for(i=n/2; i>=1; i--){

sift(r, i, n);

}

for(i=n; i>=2; i--){

temp = r[1];

r[1] = r[i];

r[i] = temp;

sift(r, 1, i-1);

}

}

void main(){

int n, i;

printf("* 请输入待排序序列的长度:");

scanf("%d",&n);

printf("* 请输入该待排序序列:");

for(i=1; i<=n; i++){

scanf("%d",&A[i]);

}

HeapSort(A, n);

printf("* 该序列由小到大排序结果为:\n");

for(i=1; i<=n; i++){

printf("%d ",A[i]);

}

}

参考资料

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值