c++实现对任意数目输入整数的升序、降序排序

rt,用c++实现。考虑溢出问题,我决定用char做,结果发现字符数组没定义大小没办法声明,输入。。。所以各位高手能给我一个解答,最好能有全部的程序,感激了,如果好的话我会考虑加分的。。。
最好能把整个程序打出来 - -。。。谢谢了。。

#include<iostream.h>
void main()
{
int *s,temp,i,n,num;
cout<<"请输入排序数个数:";
cin>>num;
s=new int [num];
cout<<"请输入"<<num<<"个数:"<<endl;
//------输入------
for(i=0;i<num;i++)
cin>>s[i];
//------排序------
for(int a=0;a<num;a++)
for(int b=a+1;b<num;b++)
if(s[a]>s[b])//现在 是由小到大排序,如果是由大到小,将此句>改为<即可
{temp=s[a];
s[a]=s[b];
s[b]=temp;}
//------输出------
cout<<"由小到大排序为:";
for(n=0;n<num;n++)
cout<<s[n]<<" ";
cout<<endl;
}
温馨提示:答案为网友推荐,仅供参考
第1个回答  2010-01-01
用链表实现
#include<iostream>
using namespace std;
/*链表结构体*/
struct link
{
int data;
link * next;
};
/*链表的建立,返回链表的长度*/
int input_data(link * head)
{
link *p;
int n=0;
p=head;
int input=0;
cout<<"请输入任意个整数,以非数字字符结束:"<<endl;
cin>>input;
p->data=input;
while(1)
{

cin>>input;

p->next=new link;
p->next->data=input;
p->next->next=NULL;
p=p->next;

if(!cin)
break;

}
p=head;
while(p->next!=NULL)
{
n++;
p=p->next;
}
return n;
}
int main()
{
link * head=new link;
int n,i=0,j=0,temp;
head->next=NULL;
n=input_data(head);

int *a=new int[n];
int *b=new int[n];
link *p=head;
//将链表中的数值赋给数组
while(p->next!=NULL)
{
a[i]=p->data;
b[i]=p->data;
i++;
p=p->next;
}

//升序和降序排列
for(i=0;i<n-1;i++)
{
for(j=i;j<n;j++)
{
if(a[j]<a[i])
{
temp=a[i];
a[i]=a[j];
a[j]=temp;

}
if(b[j]>b[i])
{
temp=b[i];
b[i]=b[j];
b[j]=temp;
}
}
}

//打印
cout<<"升序排列:"<<endl;
for(i=0;i<n;i++)
{
cout<<a[i]<<" ";
}

cout<<endl<<"降序排列:"<<endl;
for(i=0;i<n;i++)
{
cout<<b[i]<<" ";
}

return 0;
}
第2个回答  2010-01-01
堆排序:

#include "stdio.h"
void heap(int R[],int i,int m)
//将以r[i]为根结点的二叉树调整为堆,即使其根结点的值最大,建立大顶堆
{ int j;
int temp;
temp=R[i];
j=2*i;//r[j]为以r[i]为根结点的二叉树是左孩子
while (j<=m)
{ if ((j<m)&&(R[j]<R[j+1]))
j++;
/*取以r[i]为根结点的二叉树的右孩子和左孩子中较大者替换根r[i]*/
/*被交换的子树堆不满足堆的性质,继续对不满足堆性质的子树进行交换操作,直到叶子结点*/
if (temp<R[j])
{ R[i]=R[j];
i=j;j=2*i;
}
else break;
}
R[i]=temp;
}

void heapsort(int R[],int n)
{ int i;
int x;
for (i=n/2;i>=1;i--)
heap(R,i,n);
for (i=n;i>=1;i--)
{
x=R[1];R[1]=R[i];R[i]=x;
/*对n个元素的序列进行堆排序,将根结点与最后一个结点进行交换*/
heap(R,1,i-1);
/*调整前n-1个元素为新的堆,再将根结点与第n-1个元素进行交换,重复直到整个序列有序*/
}
}
void main()
{int r[11];
int i;
for (i=1;i<11;i++)
scanf("%d",&r[i]);
heapsort(r,10);
for (i=1;i<11;i++)
printf("%d\n",r[i]);

}

/**********************************************************/

快速排序

#include "stdio.h"
int qsort(int R[],int l,int h)
{ int i,j;
int temp;
i=l; j=h; temp=R[i];
do {
while ((R[j] >= temp)&&(i<j)) j--;
if (i<j) R[i++]=R[j];
while ((R[i]<=temp)&&(i<j)) i++;
if (i<j) R[j--]=R[i];
} while (i!=j);
R[i]=temp;
return i;
}

void quicksort(int R[],int s1,int t1)
{ int i;
if (s1<t1)
{ i=qsort(R,s1,t1);
quicksort(R,s1,i-1);
quicksort(R,i+1,t1);
}
}

void main()
{int a[11];
int i;
for (i=1;i<11;i++)
scanf("%d",&a[i]);
quicksort(a,1,10);
for (i=1;i<11;i++)
printf("%d\n",a[i]);

}

/**************************************************************************/

冒泡排序

#include "stdio.h"

void bublesort(int r[], int n)
{
int i,j;
int temp;
for(i=0;i<n-1; i++)
for(j=n-2;j>=i;j--)
if(r[j+1]<r[j])
{ temp=r[j+1];
r[j+1]=r[j];
r[j]=temp;}
}
void main()
{int r[10];
int i,j;
for(i=0;i<10;i++)
scanf("%d",&r[i]);

bublesort(r,10);

for(i=0;i<10;i++)
printf("%d\n",r[i]);

}

/*****************************************/

直接选择排序

#include "stdio.h"
void selectsort(int R[],int n)
//简单选择排序
{ int i,j,k;
int temp;
for (i=0;i<n-1;i++)
{ k=i;
for (j=i+1;j<n;j++)
if (R[j]<R[k]) k=j;
if (k!=i)
{ temp=R[i];
R[i]=R[k];
R[k]=temp;
}
}
}
void main()
{int r[10];
int i;
for(i=0;i<10;i++)
scanf("%d",&r[i]);
selectsort(r,10);
for(i=0;i<10;i++)
printf("%d\n",r[i]);

}

/*****************************************************************/
直接插入排序

#include "stdio.h"

void insertsort (int a[],int n)//对n个数据进行插入排序的算法
{ int i,j;
for (i=2;i<=n;i++)
{ a[0]=a[i];
j=i-1;
while (a[0]<a[j])
a[j+1]=a[j--];
a[j+1]=a[0];}
}

void main()
{int a[11];
int i,j;
for(i=1;i<=10;i++)
scanf("%d",&a[i]);
insertsort(a,10);
for(i=1;i<=10;i++)
printf("%d\n",a[i]);

}
第3个回答  2020-05-07
提供一个用标准容器list对任意长度整数列的排序输出程序:
//---------------------------------------------------------------------------
#include
<list>
#include
<iostream>
using
namespace
std;
int
main(void)
{
list<int>
a;
int
n;
cout<<"请输入要排序的整数的个数:";
cin>>n;
cout<<"请输入"<<n<<"个整数:"<<endl;
for
(int
i
=
0;
i<n;
i++)
{
int
cn;
cin>>cn;
a.push_back(cn);
}
a.sort();
//排序
cout<<"排序后的结果为:"<<endl;
for
(list<int>::iterator
begt=a.begin();
begt!=a.end();
begt++)
{
cout<<*begt<<'\t';
}
cout<<endl;
return
0;
}
//---------------------------------------------------------------------------
第4个回答  2010-01-01
#include<iostream>
using namespace std;
void select_sort(double *e,int n);
int main()
{
cout<<"输入需要排序的个数"<<endl;
int n;
cin>>n;
cout<<"请依次输入每个数据,并按回车分隔"<<endl;
double d[100000];
for(int c=0;c<n;c++)
{
cin>>d[c];
}
select_sort(d,n);
cout<<"排序结果为"<<endl;
for(int j=0;j<n;j++)
{
cout<<"["<<d[j]<<"]"<<"--";
}
system("pause");
return 0;
}
void select_sort(double *e,int n)
{
double t;
for(int b=0;b<n-1;b++)
{
for(int a=b+1;a<n;a++)
{
if(*(e+a)<*(e+b))
{
t=*(e+a);
*(e+a)=*(e+b);
*(e+b)=t;
}
}
}
}

这个临时写的,开始需要输入你要将多少个数字进行排序
这个程序能够实现小数的排序,当然也能够实现整数的排序。如果把double 改成int就只能进行整数的排序了
排序时一门学问 多研究吧