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

来源:互联网 发布:php 字符串转换成html 编辑:程序博客网 时间:2024/06/10 20:03

为了实现对两个数组进行优先级排序,用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;

}


结果一:

}

结果二

原创粉丝点击