作者热门文章
- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我需要根据作为第二个参数传递的任何函数计算出的偏好顺序,以升序或降序对列表进行排序。
算法基本上是找到最小值,根据作为 sort list( ) 函数调用的第二个参数传递的函数的计算,将其与第一个位置或最后一个位置的值交换。
这是我的代码,我只是不知道如何实现一个函数传递,让它升序或降序。我的只有一种方式:
#include <stdio.h>
#include <stdlib.h>
typedef struct iorb {
int base_pri;
struct iorb *link;
char filler[100];
} IORB;
int push(struct iorb **h, int x)
{
struct iorb *temp = (struct iorb*)malloc(sizeof(struct iorb));
temp->base_pri = x;
temp->link = *h;
*h = temp;
return 0;
}
void print(struct iorb *head)
{
struct iorb *temp = head;
while(temp != NULL)
{
printf("%d ",temp->base_pri);
temp = temp->link;
}
printf("\n");
}
void sort(struct iorb **h)
{
int a;
struct iorb *temp1;
struct iorb *temp2;
for(temp1=*h;temp1!=NULL;temp1=temp1->link)
{
for(temp2=temp1->link;temp2!=NULL;temp2=temp2->link)
{
if(temp2->base_pri < temp1->base_pri)
{
a = temp1->base_pri;
temp1->base_pri = temp2->base_pri;
temp2->base_pri = a;
}
}
}
}
int main()
{
struct iorb * head = NULL;
push(&head,5);
push(&head,4);
push(&head,6);
push(&head,2);
push(&head,9);
printf("List is : ");
print(head);
sort(&head);
printf("after sorting list is : ");
print(head);
return 0;
}
最佳答案
您需要提供比较器功能。您可以将它作为函数指针传递给排序函数,并使用它们代替内置操作。
像这样:
int less(int lh, int rh)
{
return lh < rh;
}
int greater(int lh, int rh)
{
return !less(lh, rh);
}
void sort(struct iorb **h, bool (*comp)(int, int))
{
int a;
struct iorb *temp1;
struct iorb *temp2;
for(temp1=*h;temp1!=NULL;temp1=temp1->link)
{
for(temp2=temp1->link;temp2!=NULL;temp2=temp2->link)
{
if(comp(temp2->base_pri, temp1->base_pri)) // Using a comparator.
{
a = temp1->base_pri;
temp1->base_pri = temp2->base_pri;
temp2->base_pri = a;
}
}
}
}
然后
sort(&head, less);
或
sort(&head, greater);
关于c - 按升序和降序排列列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50252557/
序 大家好呀,我是summo,这次来写写我在上班空闲(摸鱼)的时候做的一个小网站的事。去年阿里云不是推出了个活动嘛,2核2G的云服务器一年只要99块钱,懂行的人应该知道这个价格在业界已经是非常良心了
我尝试根据给定的级别顺序(BFS 顺序)构造 BST。我知道这是可能的,但我不知道我该怎么写。问题是我必须使用 BFS 序列。所以,我不能在这里使用递归,我必须迭代地编写我的程序......我发现这有
我是一名优秀的程序员,十分优秀!