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