我想做一个任意一个double型或者int型的数组进行排列的函数。可是到了第一步函数定义就遇到问题了。请问怎么做这样的函数啊?
你所说的位置大小的数组,应该是在输入的时候不知道会从键盘输入多少个数吧,当输入完成的时候,输入了多少个数是能知道的。这时候你可以用冒泡排序,也可以用选择排序。
输入不定个数的数据,有多种方法,比如当输入回车符的时候结束输入,或者当输入-1的时候结束,这个根据具体情况来定。下面的例子是当输入回车符时结束输入。
运行结果:
代码如下:
#include <iostream>
using namespace std;
//冒泡排序
void bubble_sort(int a[],int n);
//选择排序,升序
void select_sort(int a[],int n);
int main()
{
int *p;
int n=0;
int maxsize=1000;
p = new int[maxsize]; //先申请maxsize个空间
while(1)
{
cin >> p[n];
n++;
if(n==maxsize)
{
maxsize += 100;//在原来的基础上再额外申请100个空间
int *q = new int[maxsize];
//把原数组的元素复制到新数组中
for(int j=0;j<n;j++)
q[j]=p[j];
//释放原来的空间
delete[] p;
//让p指向新申请的空间
p = q;
}
if(cin.get() == '\n') //输入回车符结束输入
break;
}
//冒泡排序或者选择排序,都可以
bubble_sort(p,n); //select_sort(p,n);
//输出排序后的数组
for(int i = 0;i<n;i++)
cout << p[i] << " ";
//释放空间
delete[] p;
p = 0;
return 0;
}
//冒泡排序
void bubble_sort(int a[],int n)
{
int i,j,t;
for (i=0;i<n-1;i++)
{
for (j=0;j<n-1-i;j++)
{
if(a[j] > a[j+1]) //从小到大,升序
{
t = a[j];
a[j]=a[j+1];
a[j+1]=t;
}
}
}
}
//选择排序,升序
void select_sort(int a[],int n)
{
int i,j;
int minindex,tmp;
for (i=0;i<n-1;i++)
{
minindex = i;
//找出第i小的数所在的位置
for(j=i+1;j<n;j++)
{
if(a[j] < a[minindex])
minindex = j;
}
//将第i小的数放在第i个位置
if (i != minindex)
{
tmp = a[i];
a[i] = a[minindex];
a[minindex] = tmp;
}
}
}
未知大小的非字符串是没法排序
其实用c++的话,有现成的工具
直接
int array[];//doble array[] 也可以
stl::sort(begin(array),end(array));