您的位置:首页 > 编程语言 > MATLAB

用C语言实现优先级排序和MATLABsort函数的比较

2017-11-16 10:20 239 查看
为了实现对两个数组进行优先级排序,用c语言有两种实现方法,

一是需要对两个数组进行排序,然后对排序后的坐标再排序,(求最小值是我自己需要)

二是直接寻找数组排序后的元素坐标,调用qsort函数进行排序,排序后的数组会存放在原数组中,那么就有两种寻找坐标,一是寻找原数组的坐标(结果一),二是寻找排序后数组的坐标,根据需要可以自己选(结果二)。

MATLAB相对要简单很多,只需要几句话就能实现,不过对于底层的原理不太好理解。

MATLAB程序:

A=[1.0,2.0,5.0,10.0,0.0,6.0,9.0];%定义两个数组

C=[6.0,2.0,5.0,10.0,7.0,8.0,9.0];

[q,r]=sort(A);  %对A进行升序排列

[a,t]=sort(r);  %对r进行升序排列

[l,s]=sort(C);  %对C进行升序排列

[c,z]=sort(s);  %对s进行升序排列

[d,m]=min(t+z); %求坐标和的最小值

结果与VS结果一一直:



VS程序代码

#include<stdio.h>  

#include<stdlib.h>  

//#include<math.h>

//#define N 7

int comp(const void*a, const void*b)//用来做比较的函数。

{
return *(int*)a - *(int*)b;//升序排列

// return *(int*)b - *(int*)a;//降序排列

}

int main()

{
int q,n,j,t;
int h;
float  r[7], s[7], p[7];
int  d[7], z[7] ;
void minum(float *a);
float b[7] = {1.0,2.0,5.0,10.0,0.0,6.0,9.0};
float c[7] = { 6.0,2.0,5.0,10.0,7.0,8.0,9.0 };
for (j = 0; j < 7; j++)
r[j] = b[j];
for (j = 0; j < 7; j++)
s[j] = c[j];
qsort(b, 7, sizeof(b[0]), comp);//调用qsort排序, 
qsort(c, 7, sizeof(c[0]), comp);//调用qsort排序,
for (q = 0; q<7; q++)//遍历找出数组的坐标位置 
for (j = 0; j<7; j++)
{
if (r[q] == b[j])
z[q] = j + 1;
    if (s[q] == c[j])
d[q] = j + 1;
p[j] = z[j] + d[j];
}

for (h = 0; h < 7; h++)
{
printf("%f ", p[h]);
}
printf("\n");
minum(p);

}

void minum(float *a)

{
int i;
int m = 1;
float min;
min = a[0];
for (i = 1; i < 7; i++)
{
if (min > a[i])
{
min = a[i];
m = i + 1;
}
else 
continue;
}
printf("%f ", min);
printf("\n");
printf("%d ", m);
printf("\n");
switch (m)
{
case 1: printf("%d ", 0);
break;
case 2: printf("%d ", 1);
break;
case 3: printf("%d ", 2);
break;
case 4: printf("%d ", 3);
break;
case 5: printf("%d ", 4);
break;
case 6: printf("%d ", 5);
break;
case 7: printf("%d ", 6);
break;
default:  break;
}

结果一:

}


结果二

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息