题目:堆排序实现
假设有一个数据类型为整型的一维数组A,A 中的数据元素呈无序状态,编写一个采用堆排序法将A中的数据元素按由小到大进行排序的程序。
完整代码
#include<stdio.h>
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<n && r[j]<r[j+1] ) j++;
if( temp<r[j] ){
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]);
}
}
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。