要求:
1.由用户输入一维数组长度n;
2.定义指针,并根据长度n动态分配内存空间;
3.输入数组中的元素值;
4.编写函数Sort,实现数组元素的排序,其中分别通过指针和引用来传递参数;
5.显示最终排序结果。
#include <iostream>
using namespace std;
template<typename T>
void swap_(T &a,T &b)
{
T c;
c = a;
a = b;
b = c;
}
void sort_1(int *a,int n)
{
int min;
for(int i=0;i<n-1;++i)
{
min = i;
for(int j=i+1;j<n;++j)
{
if(a[j]<a[min])
min = j;
}
swap_(a[i],a[min]);
}
}
int main()
{
int n;
cout << "Please input the length of array: ";
cin >> n;
int *a = new int[n];
cout << "Please input the number: ";
for(int i=0;i<n;i++)
cin >> a[i];
sort_1(a,n);
for(int i=0;i<n;i++)
cout << a[i] << " ";
delete [] a;
return 0;
}
代码文本:
//#include "stdafx.h"//vc++ 6.0? Maybe should add this line.
#include <iostream>
using namespace std;
void Sort(int *p,int n){//指针参数排序
int i,j,k;
for(i=0;i<n;i++){
for(k=i,j=k+1;j<n;j++)
if(*(p+k)>*(p+j))
k=j;
if(k!=i)
j=*(p+k),*(p+k)=*(p+i),*(p+i)=j;
}
}
void SortA(int *&p,int n){//引用参数排序
int i,j,k;
for(i=0;i<n;i++){
for(k=i,j=k+1;j<n;j++)
if(p[k]>p[j])
k=j;
if(k!=i)
j=p[k],p[k]=p[i],p[i]=j;
}
}
int main(int argc,char *argv[]){
int n,i,k,*p;
cout << "Enter n(int n>0)...\nn=";
if(cin >> n && n>0){
if(p=new int[n]){//动态申请内存
cout << "Enter " << n << " integer data...\n";
for(i=0;i<n;cin >> *(p+i++));//输入数据
cout << "\n调用指针形参函数\n";
for(Sort(p,n),k=i=0;i<n;i++)//调用指针形参函数
cout << *(p+i) << (++k%5 ? ' ' : '\n');
if(k%20)
cout << endl;
cout << "Enter " << n << " integer data again...\n";
for(i=0;i<n;cin >> *(p+i++));//重新输入数据
cout << "\n调用引用形参函数\n";
for(SortA(p,n),k=i=0;i<n;i++)//调用引用形参函数
cout << *(p+i) << (++k%5 ? ' ' : '\n');
delete []p;//释放所申请的内存
if(k%20)
cout << endl;
}
else{
cout << "Application memory failure, exit...\n";
return 0;
}
}
else
cout << "Input error, exit...\n";
return 0;
}
由于数组不是变量,所以没有引用,只能引用数组的首指针。供参考……
本回答被提问者和网友采纳