以一个下标在数组中的值大小为优先级的优先队列,如何定义
如题比如a[5]={1,3,2,4,5}那么0,1,2下标对应的1,3,2那么在优先队列中的顺序为0,2,1...
如题 比如a[5]={1,3,2,4,5}
那么0,1,2下标对应的1,3,2那么在优先队列中的顺序为0,2,1 展开
那么0,1,2下标对应的1,3,2那么在优先队列中的顺序为0,2,1 展开
展开全部
/*
排序前
数组a[]:
36 25 14 9 85 79 64 10 34 51 76 49
数组b[]:
0 1 2 3 4 5 6 7 8 9 10 11
排序后
数组a[]:
9 10 14 25 34 36 49 51 64 76 79 85
数组b[]:
3 7 2 1 8 0 11 9 6 10 5 4
Press any key to continue
*/
#include <stdio.h>
#define N 12
void Show(int a[],int n) {
int i;
for(i = 0; i < n; ++i)
printf("%2d ",a[i]);
printf("\n");
}
int main() {
int i,j,k,t,b[N];
int a[N] = {36,25,14,9,85,79,64,10,34,51,76,49};
for(i = 0; i < N; ++i) b[i] = i; // b[]作为辅助
printf("排序前\n数组a[]:\n");
Show(a,N);
printf("数组b[]:\n");
Show(b,N);
for(i = 0; i < N - 1; ++i) { // 二重循环完成选择排序
k = i;
for(j = i + 1; j < N; ++j) {
if(a[k] > a[j]) k = j;
}
if(k != i) {
t = a[k];
a[k] = a[i];
a[i] = t;
t = b[i]; // 辅助数组同步操作
b[i] = b[k];
b[k] = t;
}
}
printf("排序后\n数组a[]:\n");
Show(a,N);
printf("数组b[]:\n");
Show(b,N); // 现在得到的数组b[],就是你需要的
return 0;
}
追问
虽然你没有看懂我的问题,还是谢谢你
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询