//插入排序 //算法:新加入元素与已经有的数据进行比较,需要移动原有数据的位置 #include <iostream> using namespace std; template <class T> void Insert(const T& e, T *a, int i); //使用模版 template <class T> void InsertionSort(T *a, int n){ //数组a中有n个数 T temp; for(int i=1;i<n;i++){ //一次插入第i个元素 temp = a[i]; //把a[i]保留在临时变量之中 Insert(temp,a,n); //调用插入函数,把temp插入到数组a中,a有n个元素 // int j = i-1; //内部循环变量从j开始 // while(j>=0 && temp < a[j]){ //当j大于等于0,而且此时的数大于temp时 // a[j+1] = a[j]; //把大于记录i的数的记录都后移 // j = j-1; // } // a[j+1] = temp; //最后记录j+1就是记录i的正确位置,回填 } } template <class T> void Insert(const T& e, T *a, int i){ //把常量e 插入到有i个元素的数组a中 a[0] = e; while(e< a[i]){ a[i+1] = a[i]; //让大于e的数都后移 i--; } a[i+1] = e; } int main(){ int x[] = {23,43,12,10}; //当数组是float类型呢?重新写函数吗?此时可以用函数模板 double y[] = {2.4,6.8,5.7}; InsertionSort(x,4); cout << "x数组排序后:"; for(int i=0;i<4;i++) cout << x[i]<<" "; cout <<endl; InsertionSort(y,3); cout <<"y数组排序后:"; for(int i=0;i<3;i++) cout << y[i]<<" "; return 0; }
输出:
x数组排序后:10 43 12 10
y数组排序后:5.7 6.8 5.7