对数组进行排序时,如何能够做到不改变数组本来的值,而对数组元素进行排序呢?
其实很简单,可以运用指针数组来进行操作,即利用指针数组保存原数组各元素的地址,再对指针数组进行排序操作。期间没有改变指针数组指向地址的值(即原数组的个元素的值),只是对指针数组的地址进行排序操作。
算法实现:
#include<iostream>
using namespace std;
#include<time.h>
#define n 6
int main()
{
int a[n]={0};
//为简便对数组进行初始化,可利用生成随机数的方法进行初始化
time_ ts;
srand((unsigned int)time(&ts)); //设置随机数种子
for(int i=0;i<n;i++)
{
a[i]=rand()%100+1; //a[i]取值范围0-100
cout<<a[i]<<" ";
}
cout<<endl;
//功能实现
int *p[n]; //定义指针数组
//对指针数组的元素进行初始化
for(int i=0;i<n;i++)
{
p[i]=&a[i];
}
//冒泡排序
for(int i=0;i<n-1;i++)
{
for(int j=0;j<n-i-1;j++)
{
if(*p[j]>*p[j+1])
{
int *t=p[j];
p[j]=p[j+1];
p[j+1]=t;
}
}
}
for(int i=0;i<n;i++)
{
cout<<*p[i]<<" ";
}
cout<<endl;
for(int i=0;i<n;i++)
{
cout<<a[i]<<" ";
}
return 0;
}