1 /**********************************************************************
2 *
3 * 文 件 名:InsertSort.cpp
4 *
5 * 文件描述:演示插入排序算法
6 *
7 * 创 建 人:crazyhf 2012年05月12日
8 *
9 * 版 本:1.0
10 *
11 * 修改记录:
12 *
13 **********************************************************************/
14
15 # include <iostream>
16
17 # include <vector>
18
19 using std::cin ;
20 using std::cout ;
21 using std::endl ;
22 using std::vector ;
23
24
25 /*=====================================================================
26 *
27 * 函 数 名:InsertSort
28 *
29 * 参 数:
30 * vector < Comparable > &vecary :要进行排序的数据序列
31 * Compare lessThan :排序所使用的数值比较器
32 *
33 * 功能描述:演示插入排序算法
34 *
35 * 返 回 值:无返回值
36 *
37 * 抛出异常:
38 *
39 * 作 者:crazyhf 2012年05月12日
40 *
41 ======================================================================*/
42
43 template < class Comparable , class Compare >
44 void InsertSort( vector < Comparable > &vecary, Compare lessThan )
45 {
46 int num = vecary.size() ;
47
48 for( int i = 1 ; i < num ; i++ )
49 {
50 Comparable tmp = vecary[i] ;
51
52 for( int j = i ; j && lessThan( tmp , vecary[j - 1] ) ; j-- )
53 {
54 vecary[j] = vecary[j - 1] ;
55 }
56
57 vecary[j] = tmp ;
58 }
59 }
60
61 /*=====================================================================
62 *
63 * 类 名:less
64 *
65 *
66 * 功能描述:一个实现数值比较功能的函数对象
67 *
68 *
69 * 成员函数:
70 *
71 * 成员函数:bool operator( const Compare &a , const Compare &b )
72 *
73 * 功能描述:比较对象a和对象b的关系
74 *
75 * 返 回 值:a < b则返回true,否则返回false
76 *
77 *
78 * 抛出异常:
79 *
80 * 作 者:crazyhf 2012年05月12日
81 *
82 ======================================================================*/
83
84 template < class Compare >
85 class less {
86
87 public:
88 bool operator( )( const Compare &a , const Compare &b ) const
89 { return a < b ; }
90 } ;
91
92
93 int main( int argc, char **argv )
94 {
95 vector < int > vec ;
96 int n ;
97 cout << "输入数据序列的个数:" ;
98
99 if ( cin >> n )
100 {
101 int data ;
102
103 while( n-- )
104 {
105 if( cin >> data ) vec.push_back( data ) ;
106 }
107
108 InsertSort( vec , less < int >( ) ) ;
109
110 n = vec.size( );
111 while( n-- ) cout << vec[n] << endl ;
112 }
113
114 return 0 ;
115 }