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就只能进行整数的排序了
排序时一门学问 多研究吧

c++实现对任意数目输入整数的升序、降序排序
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])\/\/现在 ...

如何用c++编写程序对整数进行降序排列?
4.定义一个自定义函数,比较整数序列中任意两个数字的序数大小。5.在主函数中,首先定义两个整数,并保存整数个数和排名计数。6.使用for循环输入序列中的整数,并设置序列中每个整数的序列号。7.按整数大小排序的序列中的所有数值。8.将好排序数值添加排序编号。9.最后,根据索引输出所有整数的排...

c++输入n及n个整数,按奇数升序,偶数降序排列输出
根据type决定是升序还是降序] * @param ary [传进来要排序的数组] * @param len [排序数目] * @param type [排序类型,升序或降序] *\/void sort(int *ary,int len,bool type){ \/\/每个数同后面的所有数都比较一次,将最值放到最前面,下次从下一个开始比较 for(int i=0;i<len...

C++用sort排列一维数组(升序、降序、期间排序)
sort函数的可以这样写,sort(a,a+n); ,就可以将输入的数据排列好。样例 6 \/\/数据个数 3 1 6 5 2 4 \/\/要排列的数据 输出 1 2 3 4 5 6 可以看到sort函数肥肠完美地为我们排列好了数据 sort从大到小排序(降序)为了完成从大到小的排序,我们只需要一个bool类型的函数,一般把这个函数写...

C语言数组七个数升序排列和降序排列怎么编程?
4、输入字符串:printf("please input string b:\\n");scanf("%s", b); \/*输入字符串2放入b数组中*\/。5、给字符串进行排序。6、链接字符串并输出:if (a[i] == '\\0') \/*判断a中字符是否全都复制到c中*\/ p = b + j; \/*p指向数组b中未复制到c的位置*\/。7、输出最后...

c++三个数排序 键盘输入三个数字,输出结果从大到小排序(用if类型)
最后,如果a仍然大于b,再次进行一次交换,以确保整个序列按照降序排列:cpp if (a > b) { t = a;a = b;b = t;} 最后,使用cout输出排序后的结果:cpp cout << a << " " << b << " " << c << endl;这样,通过一系列的if条件判断,我们实现了输入三个数字并按从大到小的顺序...

...c++编程 10个数 排序 十个数排序,用不同方法实现两种排法:升序和降...
cout<<"S:对数组进行升序排序"<<endl;cout<<"J:对数组进行降序排序"<<endl;cout<<"输入你的选择(S\/J):";cin>>c;switch(c){ case 'S':Maopao(a);break;case 'J':Charu(a);break;default:cout<<"选择错误!"<<endl;break;} for(i=0;i<M;i++){ cout<<a[i]<<" ";} c...

...输入20个整数,把前十个数按降序排序,后十个数按升序排序。(注意...
\/\/整型数组,但要求可以输入小数,我的理解是输入的小数转换成整数存到数组里\/\/不知道是不是这个意思#include<iostream>template<typename Type>bool great(Type i,Type j){ return i>j;};template<typename Type>bool little(Type i,Type j){ return i<j;};template<typename Type>void sort...

求解:C++ 用选择排序法对n个整数排序(降序)
include <iostream> using namespace std;int main(){ int a[4];int i,j,t,min;cout<<"input 4 numbers:"<<endl;for(i=0;i<4;i++)cin>>a[i]; \/\/输入四个数 for(i=0;i<=3;i++)\/\/外层循环,每个数都要比较 { min=i;for(j=i+1;j<=4;j++)\/\/内层循环,把外层的一个...

降序排序用C++语言怎么排?
void SelectSort(T A[], int n){ int small;for (int i=0;i<n-1;i++){ small=i;for (int j=i+1;j<n;j++)if (A[j]<A[small])small=j;swap(A[i],A[small]);} } template<class T> void InsertSort(T A[],int n){ for (int i=1;i<n;i++){ int j=i;T ...

相似回答