让无序数组元素进行排序,排序完后将排序后元素对应的原先元素的位置输出

原创 2013年12月04日 17:07:08

题目:

让无序数组元素进行排序,排序完后将排序后元素对应的原先元素的位置输出

(1)方法1

方法1:先将数组元素原先的对应位置记录在另一个数组中
       并在进行选择排序的过程中,交换数组元素的同时也交换对应位置数组中的对应元素值

/*
选择法排序
并在排序后的数组元素在原先数组的对应位置输出
方法1:先将数组元素原先的对应位置记录在另一个数组中
       并在进行选择排序的过程中,交换数组元素的同时也交换对应位置数组中的对应元素值
*/
#include <iostream>
using namespace std;
int main( )
{
 int a[11],i,j,k,t; //a数组记录元素数值
 int f[11]; //f数组记录a中原先的数组元素位置

 cout<<"enter the originl array:"<<endl;

 for(i=1;i<=10;i++) cin>>a[i];         //输入10个数

 for(i=1;i<=10;i++) f[i]=i;         //初始化原先数组元素位置

 //选择法排序
 for(i=1;i<=9;i++)
  { k=i;
     for(j=i+1;j<=10;j++)                    
       if(a[j]<a[k]) k=j;
     //交换a[k]和a[i]
	 t=a[k];   
	 a[k]=a[i];
	 a[i]=t; 
	 //交换f[k]和f[i],记录位置随数据交换的同时也要改变
	 t=f[k];
	 f[k]=f[i];
	 f[i]=t;
   }

 cout<<"the sorted array:"<<endl;
 for(i=1;i<=10;i++)  cout<<a[i]<<" ";   //输出10个已排好序的数
 cout<<endl;
 
 cout<<"putout the location of originl array:"<<endl;
 for(i=1;i<=10;i++)   cout<<f[i]<<" "; 
 cout<<endl;

 return 0;
}




(2)方法2

方法2:先将数组元素存放在另一个数组中
       排序
    对排序后的数组元素依次去查找原先数组中的对应位置

/*
选择法排序
并在排序后的数组元素在原先数组的对应位置输出
方法2:先将数组元素存放在另一个数组中
       排序
	   对排序后的数组元素依次去查找原先数组中的对应位置
*/
#include <iostream>
using namespace std;
#define N 10
int main( )
{
 int a[N+1],i,j,k,t,flag; //a数组记录元素数值,flag表示查找到的位置
 int b[N+1]; //b数组存放a数组中的所有元素值

 cout<<"enter the originl array:"<<endl;

 for(i=1;i<=N;i++) cin>>a[i];         //输入10个数

 for(i=1;i<=N;i++) b[i]=a[i];         //初始化原先数组元素位置

 //选择法排序
 for(i=1;i<=N-1;i++)
  { k=i;
     for(j=i+1;j<=N;j++)                    
       if(a[j]<a[k]) k=j;
     //交换a[k]和a[i]
	 t=a[k];   
	 a[k]=a[i];
	 a[i]=t; 
   }

 cout<<"the sorted array:"<<endl;
 for(i=1;i<=N;i++)  cout<<a[i]<<" ";   //输出10个已排好序的数
 cout<<endl;

 cout<<"putout the location of originl array:"<<endl;
 for(j=1;j<=N;j++)   
 {  if(j==1)   //排序后第一个元素的位置查找
	{ for(i=1;i<=N;i++)
	   if(a[j]==b[i])
	   {cout<<i<<" ";	    
		flag=i;  //记录下当前找到的位置
		break;	
	   }
	}
	else   //排序后除了一个元素以外其它元素的查找
	{ if(a[j-1]==a[j])   //如果排序后的相邻两个元素相等,即当前元素与前一次查找的元素相同
		{for(i=flag+1;i<=N;i++)  //则从上次找到的位置flag后一个位置开始查找
          if(a[j]==b[i])
		  {cout<<i<<" ";	      	
		   flag=i; //记录下当前找到的位置
		   break;
		  }
		}
	  else   //当前元素与前一次查找的元素不相同
	  {for(i=1;i<=N;i++)
	    if(a[j]==b[i])
		{cout<<i<<" ";
	   	 flag=i; //记录下当前找到的位置
		 break;
		}	
	  }
	}	
	
 }
 cout<<endl;

 return 0;
}




相关文章推荐

数组排序同时返回元素在原数组中的位置

对数组中的元素进行排序是非常基础的问题,从现有的众多排序算法中任选一种即可实现。但是如果要求排序后同时返回新的(有序)数组中每个元素在旧的(未排序)数组中之原始位置,问题可能就变得有些棘手了...

对一个数组,按照给定的下标进行排序,仅使用两两交换的方式

对一个数组,按照给定的下标进行排序,仅使用两两交换的方式,空间复杂度O(1)。例:原数组 A B C D E,现给定新位置为3 0 1 4 2 排序后的结果是D A B E C 初次见到这道题...
  • LF_2016
  • LF_2016
  • 2016年12月17日 15:11
  • 1107

C++ 字符数组的拷贝、拼接、逆序输出 函数的实现

code blocks解决中文乱码问题:settings→compiler and debugger→compiler settings→other options→粘贴一条: -fexec-char...

C++算法之 合并两个数组

1:合并排序,将两个已经排序的数组合并成一个数组,其中一个数组能容下两个数组的所有元素;   因为题目当中已经有一个数组可以容的下两个数组的元素,所有不需要请求新的数组,但是要把比较后的数组从后面...

iOS开发中对数组元素进行排序

数组排序在实际开发中还是比较常用的, 因此对于各种排序方式一定要熟记于心...

ArrayList对动态数组进行排序数组由Scanner后台动态接收数组元素

import java.io.*; import java.util.*; public class qiPa { public static void main(String args[]) t...

day06-1static 使用静态方法并生成文档取最值,选择排序,冒泡排序,位置交换,打印数组元素

/* public static void main(String[] args) 主函数:是一个特殊函数,作为程序的入口,可以被jvm调用 主函数的定义: public:代表着该函数的访问权限是...

Java--填充替换数组元素、对数组进行排序、复制数组、数组查询、

(一)填充替换数组元素: 1.填充数组元素: package test; import java.util.Arrays; public class test { public s...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:让无序数组元素进行排序,排序完后将排序后元素对应的原先元素的位置输出
举报原因:
原因补充:

(最多只允许输入30个字)