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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了让无序数组元素进行排序,排序完后将排序后元素对应的原先元素的位置输出相关的知识,希望对你有一定的参考价值。

题目:

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

(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;
}

技术分享

以上是关于让无序数组元素进行排序,排序完后将排序后元素对应的原先元素的位置输出的主要内容,如果未能解决你的问题,请参考以下文章

插入排序

排序算法---插入排序

排序之选择排序

漫画:寻找无序数组的第k大元素

冒泡排序与选择排序的比较(Python实现)

冒泡排序与选择排序