排序-堆排序

问题引入 

【问题描述】

设若干组待排序序列,进行从小到大排序。采用堆排序方法。输出每次堆排的中间结果。

【输入形式】

输入若干组数据,每组数据包括:

(1)待排序序列长度n;

(2)待排序序列(整型序列)。

【输出形式】

输出每次堆排的结果。

【样例输入】

9

5 14 17 9 12 8 19 11 16

5

2 6 4 1 3

【样例输出】

heapSort:

19 16 17 14 12 8 5 11 9

17 16 9 14 12 8 5 11 19

16 14 9 11 12 8 5 17 19

14 12 9 11 5 8 16 17 19

12 11 9 8 5 14 16 17 19

11 8 9 5 12 14 16 17 19

9 8 5 11 12 14 16 17 19

8 5 9 11 12 14 16 17 19

5 8 9 11 12 14 16 17 19

heapSort:

6 3 4 1 2

4 3 2 1 6

3 1 2 4 6

2 1 3 4 6

1 2 3 4 6

程序设计 

#include
#include
#define MAX 1000

void printList(int list[], int n)
{
     int i;
     for(i=0; i      {
         printf("%d ", list[i]);
     }
     printf("\n");
}

void heapAdjust(int list[], int u, int v)
{
int i=u;
    int length=v;
    int k,temp=list[i];
    for(k=i*2+1;k     {
        if(k+1             k++;            
        }
        if(list[k]>temp)
        {
            list[i]=list[k];
            i=k;
        }
        else{
            break;        
        }
    }
    list[i]=temp;
}

void heapSort(int list[], int n)
{
int i=0,temp=0;
    for(i=n/2-1;i>=0;i--)
        heapAdjust(list,i,n);
    for(i=n-1;i>0;i--)
    {
        printList(list,n);
        temp=list[0];
        list[0]=list[i];
        list[i]=temp;
        heapAdjust(list,0,i);
    }
    printList(list,n);
}

int main()
{
    int i,n;
    int a[MAX];
    while(scanf("%d",&n)==1)
    {
        for(i=0;i         {
            scanf("%d",&a[i]);
        }
        printf("heapSort:\n");
        heapSort(a,n);
    }
    return 0;

你可能感兴趣的:(#,【数据结构与算法】题库,数据结构,排序算法,算法)