为了账号安全,请及时绑定邮箱和手机立即绑定

请问C++二维数组sort函数排序问题?

/ 猿问

请问C++二维数组sort函数排序问题?

忽然笑 2019-07-09 11:07:28

C++二维数组sort函数排序问题


查看完整描述

3 回答

?
慕盖茨1488219

cmp是一个自定义排序函数,它有两个参数a和b,返回值为int型,为这两个参数比较的结果。如果a>b,返回值大于0;如果a=b,返回值为0;如果a<b,返回值小于0。例:

1234int cmp(int a, int b){    return a-b;}


查看完整回答
反对 回复 2019-07-13
?
PIPIONE
123456789#include <stdio.h>#include <windows.h> int main(void){    ShellExecute(0,"open","cmd.exe","","",SW_SHOWNORMAL);         return 0;}


查看完整回答
反对 回复 2019-07-13
?
MYYA

要做到P排好序的同时C同时排好序,C的对应的元素关键字大小应和P正相关,否则必须分别排序。

同时要排序后知道之前的位置,可以考虑用间接寻址(需要一个等大小的指针数组)。

而且,这样做的话,并真正在地对数组排序,而是对指针排序,通过排好序的指针懂得数组的的大小顺序,当然,排序前的位置也是知道的。

#include <stdlib.h>

#include <iostream>

using namespace std;

#define N 10

template <class T> 

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[]排序前"<<endl;

for(i = 0;i < N;i++)

cout<<P[i]<<' ';

cout<<endl;

ShellSort(pt,N);

cout<<"P[]排序后"<<endl;

for(i = 0;i < N;i++)

cout<<*pt[i]<<' ';

cout<<endl;

cout<<"P[i]排序前的位置"<<endl;

for(i = 0;i < N;i++)

cout<<(int)(pt[i] - pt[0])<<' ';

cout<<endl;

cout<<"C[]排序后的位置"<<endl;

for(i = 0;i < N;i++)

cout<<C[pt[i] - pt[0]]<<' ';

cout<<endl;

return 0;

}

这仅是个思路。

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


查看完整回答
反对 回复 2019-07-13

添加回答

回复

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信