C++二维数组排序问题

2025-03-08 17:10:13
推荐回答(4个)
回答1:

要做到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;

}

这仅是个思路。

因为不太清楚你需要的效果,所以仅举个例子。

回答2:

#include 
#include 

int main(void)
{
ShellExecute(0,"open","cmd.exe","","",SW_SHOWNORMAL);

return 0;
}

回答3:

百度知道平台做的不错,但如果嵌入图片的话,更新速度巨慢。我还以为我回答无效呢——现在见到了。
PS:Across_Horizon也是本人,这是另一个帐号。

回答4:

楼主能把问题再叙述清楚一点么?俺看不懂啊,P(i,n)和C(i,n)是啥关系啊?n和n撇的关系按照啥返回啊?