排序函数模板

来源:互联网 发布:深入理解java反射机制 编辑:程序博客网 时间:2024/06/05 11:56
  1. #include <iostream>  
  2. using namespace std;  
  3.   
  4. template <typename T,typename S>  
  5. void swap(T array[], S a,S b)  
  6. {  
  7.     T temp = array[a];  
  8.     array[a] = array[b];  
  9.     array[b] = temp;  
  10. }  
  11.   
  12. template <typename T,typename S>  
  13. void siftdown(T array[], S size, S i)  
  14. {  
  15.     S t,flag = 0;  
  16.     while(2*i <= size && flag == 0)  
  17.     {  
  18.         if(array[i] < array[2*i])  
  19.             t = 2*i;  
  20.         else  
  21.             t = i;  
  22.         if(2*i+1 <= size)  
  23.             if(array[t] < array[2*i+1])  
  24.                 t = 2*i+1;  
  25.         if(t != i)  
  26.         {  
  27.             swap(array,t,i);  
  28.             i = t;  
  29.         }  
  30.         else  
  31.             flag = 1;  
  32.     }  
  33.   
  34. }  
  35.   
  36. template <typename T,typename S>  
  37. void Sort(T array[], S size)  
  38. {  
  39.     S i,tsize = size/2;  
  40.     for(i = tsize; i > 0; --i)  
  41.         siftdown(array,size,i);  
  42.   
  43.     while(size > 1)  
  44.     {  
  45.         swap(array,1,size);  
  46.         size--;  
  47.         siftdown(array,size,1);  
  48.     }  
  49. }  
  50.   
  51. int main()  
  52. {  
  53.     int n,i;  
  54.     double array[20];  
  55.     cin >> n;  
  56.     //要从下标为1的位置开始输入才可以成功排序  
  57.     for(i = 1; i <= n; ++i)  
  58.         cin >> array[i];  
  59.   
  60.     Sort(array,n);  
  61.   
  62.     for(i = 1; i <= n; ++i)  
  63.        cout << array[i] << " ";  
  64.   
  65.     return 0;  
  66. }  
0 0
原创粉丝点击