输入10个整数,将它们从小到大排序后输出,并给出现每个元素在原来序列中的位置

输入

输入数据有一行,包含10个整数,用空格分开。

输出

输出数据有两行,第一行为排序后的序列,第二行为排序后各个元素在原来序列中的位置。

样例输入

1 2 3 5 4 6 8 9 10 7

样例输出

1 2 3 4 5 6 7 8 9 10
1 2 3 5 4 6 10 7 8 9

第1个回答  推荐于2018-03-20
#include<iostream>

using namespace std;

void main(void)
{
int number=10;
int *array,*index;
int temp;
int i,j;
array=new int[number];
index=new int[number];
cout<<"please input "<<number<<" integers:"<<endl;
for(i=0;i<number;i++)
{
cin>>array[i];
index[i]=i+1;
}
for(i=0;i<number-1;i++)
{
for(j=i+1;j<number;j++)
{
if(array[i]>array[j])
{
temp=array[i];
array[i]=array[j];
array[j]=temp;
temp=index[i];
index[i]=index[j];
index[j]=temp;
}
}
}
cout<<"the ascending sort is:"<<endl;
for(i=0;i<number;i++)
{
cout<<array[i]<<" ";
}
cout<<endl<<"its initial index is:"<<endl;
for(i=0;i<number;i++)
{
cout<<index[i]<<" ";
}
cout<<endl;
delete array;
delete index;
}本回答被网友采纳
第2个回答  2010-05-20
#include<stdio.h>
#include<conio.h>
void sort(int a[],int length);
main()
{int a[10],i;
clrscr();
for(i=0;i<10;i++)
scanf("%d",&a[i]);
for(i=0;i<10;i++)
printf("%d ",a[i]);
printf("\n");
sort(a,10);
for(i=0;i<10;i++)
printf("%d ",a[i]);
printf("\n");
printf("press any key to quit.......\n");
getch();
}
void sort(int a[],int length)
{int *p,*q,temp;
for(p=a;p<a+length-1;p++)
for(q=p+1;q<a+length;q++)
if(*p>*q)
{temp=*p;
*p=*q;
*q=temp;
}
}
第3个回答  2010-05-24
下面是一个我曾经编写的冒泡排序算法,有什么不懂得,就发消息给我。
#include<iostream>
#include<iomanip>
using namespace std;
void showdata(int *,int);//声明输出数组程序
void bubble(int *,int *,int);//声明改进的冒泡排序法函数
int main(void)
{
int data1[6]={60,20,80,30,20,10};
int index1[6]={0,1,2,3,4,5};
cout<<"改进的冒泡排序法"<<endl;
cout<<"排序前的数据为:\t";
showdata(data1,6);
cout<<"排序前的下标为:\t";
showdata(index1,6);
cout<<"--------------------------"<<endl;
cout<<" 调用改进冒泡排序函数之后..."<<endl;
cout<<"--------------------------"<<endl;
bubble(data1,index1,6);
cout<<"排序后的数据为:\t";
showdata(data1,6);
cout<<"排序后的下标为:\t";
showdata(index1,6);

system("pause");
return 0;
}
void showdata(int data[],int n)
{//利用循环输出n维数组data[]
for(int i=0;i<n;i++)
cout<<setw(3)<<data[i];
cout<<endl;
}
void bubble(int data[],int index[],int n)
{ for(int i=n-1;i>0;i--)//第i轮冒泡扫描,共进行n-1轮
{ int flag=0;//flag=0,表示第i轮冒泡未作冒泡操作
for(int j=0;j<i;j++)
{ if(data[j]>data[j+1])
{ int tmp1,tmp2;
tmp1=data[j];tmp2=index[j];
data[j]=data[j+1];//若前面数大于后面数,则进行交换
index[j]=index[j+1];//若前面数大于后面数,下标也进行交换
data[j+1]=tmp1;
index[j+1]=tmp2;
flag++;//flag=1,表示至少进行过一次冒泡操作
}
}
if(flag==0)
break;
}
}本回答被网友采纳
相似回答