【发布时间】:2019-05-27 12:46:04
【问题描述】:
好的,我正在尝试制作 Prima 算法,所以我需要对边数组进行排序,我尝试在这里使用快速排序,但它没有按我的计划工作。
#include <iostream>
using namespace std;
void Sort (int arr[100][4], int m, int l) {
int i,j,x,v;
i=m;
j=l;
x=(i+j)/2;
do
{
while (((arr[i][3]<arr[x][3]))and(i<=l)) i++;
while (((arr[j][3]>arr[x][3]))and(j>=m)) j--;
if (i<=j)
{
v=arr[i][1];
arr[i][1]=arr[j][1];
arr[j][1]=v;
v=arr[i][2];
arr[i][2]=arr[j][2];
arr[j][2]=v;
v=arr[i][3];
arr[i][3]=arr[j][3];
arr[j][3]=v;
i++;
j--;
}
}
while (i<=j);
if (i<l) Sort(arr,i,l);
if (m<j) Sort(arr,m,j);
}
int main () {
int i,x,y,z,n,m;
int a[100][4];
fill(&a[0][0],&a[0][0]+400,0);
cout<<"Enter number of nodes and edges\n";
cin>>n>>m;
cout<<"Enter edges and their weights\n";
for (i=0;i<m;i++) {
cin>>x>>y>>z;
a[i][1]=min(x,y);
a[i][2]=max(x,y);
a[i][3]=z;
}
Sort (a,0,m-1);
for (i=0;i<m;i++) {
cout<<i+1<<") "<<a[i][1]<<' '<<a[i][2]<<' '<<a[i][3]<<endl;
}
return 0;
}
我写的是
5 10
1 2 4
1 3 7
4 1 5
5 1 8
2 3 3
2 4 6
2 5 6
3 4 8
3 5 2
4 5 4
我得到的是 1) 3 5 2
2) 2 3 3
3) 1 4 5
4) 1 2 4
5) 4 5 4
6) 2 5 6
7) 2 4 6
8) 1 3 7
9) 1 5 8
10) 3 4 8
我不明白为什么 5 比 4 领先。希望你能帮上忙。
【问题讨论】:
-
你为什么不使用库 qsort。
-
@Yogesh 我不确定它应该如何与 multidim 一起使用。数组,我也确定在我的一个...
-
@Yogesh 建议
qsort用于标记c++ 的问题并没有真正的帮助。但是,您可能想使用std::sort -
@Неизвестный Неизвестный 关于不确定如何使用它,您可以编写自己的比较器函数,用于比较两个元素,将指针传递给多维数组并以您想要的方式访问- 用于比较。检查stackoverflow.com/questions/50084423/…。感谢您自己写作的精神。
-
@datell 是的,有点想念它。