码迷,mamicode.com
首页 > 编程语言 > 详细

堆排序

时间:2015-05-04 01:08:13      阅读:225      评论:0      收藏:0      [点我收藏+]

标签:

 

 1 #include<stdio.h>
 2 #include<stdlib.h>
 3 #include<time.h>
 4 #include<algorithm>
 5 
 6 using namespace std;
 7 const int N=15;
 8 void change(int a[],int f,int t)
 9 {
10     int tmp=a[f];
11     int i=f;
12     int j=i*2;
13     bool isfinish=0;
14     while(j<=t && !isfinish)
15     {
16         if(j<t && a[j]<a[j+1])            //j<t
17             j+=1;
18         if(tmp>=a[j])
19             isfinish=true;
20         else
21         {
22             a[i]=a[j];
23             i=j;
24             j=j*2;
25         }
26     }
27     a[i]=tmp;
28 }
29 
30 void crh(int a[] ,int n)
31 {
32     for(int i=n/2 ; i>=1 ; --i)
33         change(a,i,n);
34 }
35 
36 void hs(int a[],int len)
37 {
38     int n,i;
39     crh(a,len);
40     n=len;
41     for(int i=n ; i>=2 ; --i)
42     {
43         int tmp=a[1];
44         a[1]=a[i];
45         a[i]=tmp;
46         change(a,1,i-1);
47     }
48 }
49 int main()
50 {
51     int a[N+1];                        //【warning】这里必须N+1,下标从1开始,0没用到,只1到14可以用,没有15个数字,会非法越界
52     for(int i=1 ; i<=N ; ++i)
53         a[i]=rand()%100;
54     printf("init   arr:");
55     for(int i=1 ; i<=N ; ++i)
56         printf("%d ",a[i]);
57     printf("\n");
58     hs(a,N);
59     printf("sorted arr:");
60     for(int i=1 ; i<=N ; ++i)
61         printf("%d ",a[i]);
62     printf("\n\n");
63     system("pause");
64     return 0;
65 }

 

堆排序

标签:

原文地址:http://www.cnblogs.com/Evence/p/4475004.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!