用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;
}
结果一:
}
结果二
一是需要对两个数组进行排序,然后对排序后的坐标再排序,(求最小值是我自己需要)
二是直接寻找数组排序后的元素坐标,调用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;
}
结果一:
}
结果二
相关文章推荐
- 堆排序的C语言实现以及和快排的比较
- 利用c语言的qsort与bsearch实现排序与查找
- EKAlgorithms-常用数据结构Objective-C语言实现一数组排序
- C语言实现Matlab中findpeaks函数
- C++ vector的排序------对于结构体vector, 需要自己实现比较
- 几种排序方法的C语言实现
- [原创]详述IComparer,IComparable接口,实现自定义方法比较对象大小并排序(C#)
- 快速排序的c语言实现代码
- 最小二乘法(c语言实现线性,matlab进行拟合)及相关系数的求解
- matlab 与C语言关于filter函数的实现
- C语言直接插入排序和折半插入排序算法的实现
- 插入排序的C语言实现
- [置顶] 【算法 机器学习】MATLAB、R、python三种编程语言实现简单线性回归算法比较
- Matlab 几种卷积的实现与比较(conv与filter,conv2与filter2)
- 数据排序的几种方法(c语言实现)
- 【笔试面试知识点查缺补漏深入理解之C与C++篇】排序的C语言实现-插入-选择-快排
- Matlab 几种卷积的实现与比较(conv与filter,conv2与filter2)
- C语言实现排序算法---桶(箱)排序
- c语言实现单链表的操作:创建,删除,插入,反转, 排序等
- 二叉树实现排序(C语言)