初学c++,动态分配空间利用函数模板实现冒泡与选择排序。
头文件格式随加随用,我使用的是Dev C++,在visual studio2017中头文件应该不是这样的
不过对于初学者来说后者的东西太多,覆盖面太广,这里我们用前者举例子。
含参的排序在参数之中都要声明两点:1.分配个数2.分配数组
这里我们用冒泡函数举个例子:
template<class T>
void BubbleSort(int n, T *& p)
这是参数的写法
到主函数中
int n;
cout<<"请输入数据的个数:";
cin>>n;
double *p;
BubbleSort(n,p);//气泡排序
for(int i=0;i<n;i++)
cout<<p[i]<<" "; //挨个写出数字
delete[] p; //释放内存
这种一一对应的关系不能改变。
下面是程序:
#include<iostream>
using namespace std;
#include<string>
template<class T>
void BubbleSort(int n, T *& p)
{
p=new T[n];
if(p=NULL)
{
cout<<"内存分配失败";
exit(1);
}
cout<<"请输入"<<"n"<<"个数据"<<endl;
for(int i=0;i<n-1;i++)
cin>>p[i];
//动态分配气泡排序
for(int i=0;i<n-1;i++)
for(int j=0;j<n-i-1;j++)
if(p[j]>p[j+1])
{
T t;
p[j]=t;
t=p[j+1];
p[j+1]=t;
}
}
template<class T>
void Selectionsort( int n,T*& p)
{
p=new T[n];
if(p=NULL)
{
cout<<"内存分配失败";
exit(1);
}
cout<<"请输入"<<"n"<<"个数据"<<endl;
for(int i=0;i<n-1;i++)
cin>>p[i];
int i,j,min;
T t;
for(i=0;i<5;i++)
{
min=i; //动态分配选择排序
for (j=i+1;j<5;j++)
if(p[min]>p[j]) min=j;
t=p[i];
p[i]=p[min];
p[min]=t;
}
}
int main ()
{
int n;
cout<<"请输入数据的个数:";
cin>> n;
double *p;
BubbleSort(n,p);//气泡排序
Selectionsort(n, p);//选择排序
for(int i=0;i<n;i++)
cout<<p[i]<<" ";
delete[] p;
return 0;
}
从主函数第一行开始读入
这是debug界面
第一次做的博客有点粗糙希望大家多多包涵,有什么问题希望读者能够指出。
在学术方面有什么问题欢迎研讨,我看到都会回复!