要做到P排好序的同时C同时排好序,C的对应的元素关键字大小应和P正相关,否则必须分别排序。
同时要排序后知道之前的位置,可以考虑用间接寻址(需要一个等大小的指针数组)。
而且,这样做的话,并真正在地对数组排序,而是对指针排序,通过排好序的指针懂得数组的的大小顺序,当然,排序前的位置也是知道的。
#include
#include
using namespace std;
#define N 10
template
void ShellSort(T* a[],int n)
{ //希尔排序
int i,j,k;
T* t;
k = n / 2;
while(k > 0)
{
for(i = k;i < n;i++)
{
t = a[i];
for(j = i - k;j >= 0 && *a[j] > *t;j -= k)
a[j+k] = a[j];
a[j+k] = t;
}
k /= 2;
}
}
int main()
{
int P[N],C[N];
int* pt[N];
int i;
for(i = 0;i < N;i++)
{
P[i] = rand();
C[i] = P[i] + 1;
pt[i] = &P[i];
}
cout<<"P[]排序前"< for(i = 0;i < N;i++) cout<
cout< ShellSort(pt,N); cout<<"P[]排序后"< for(i = 0;i < N;i++) cout<<*pt[i]<<' '; cout< cout<<"P[i]排序前的位置"< for(i = 0;i < N;i++) cout<<(int)(pt[i] - pt[0])<<' '; cout< cout<<"C[]排序后的位置"< for(i = 0;i < N;i++) cout< cout< return 0; } 这仅是个思路。 因为不太清楚你需要的效果,所以仅举个例子。
#include
#include
int main(void)
{
ShellExecute(0,"open","cmd.exe","","",SW_SHOWNORMAL);
return 0;
}
百度知道平台做的不错,但如果嵌入图片的话,更新速度巨慢。我还以为我回答无效呢——现在见到了。
PS:Across_Horizon也是本人,这是另一个帐号。
楼主能把问题再叙述清楚一点么?俺看不懂啊,P(i,n)和C(i,n)是啥关系啊?n和n撇的关系按照啥返回啊?