自己实现排序函数,要求能够升序和降序,可以支持任意类型的数据排序

基础阶段第15例
def paixu(lt,key=None,reverse=False):
for i in range(len(lt)-1):
for j in range(len(lt)-1-i):
if key:
flag=(key(lt[j])<key(lt[j+1]))if reverse else (key(lt[j])>key(lt[j+1]))
else:
flag=(lt[j]<lt[j+1])if reverse else (lt[j]>lt[j+1])
if flag:
lt[j],lt[j+1]=lt[j+1],lt[j]

return lt

lt = [1, 5, 7, 3, 2, 6, 4]

lt = [
{‘name’: ‘dahua’, ‘age’: 18, ‘height’: 170},
{‘name’: ‘erhua’, ‘age’: 17, ‘height’: 160},
{‘name’: ‘xiaohua’, ‘age’: 20, ‘height’: 163},
{‘name’: ‘dagou’, ‘age’: 30, ‘height’: 175},
{‘name’: ‘ergou’, ‘age’: 25, ‘height’: 172},
]
print(paixu(lt,reverse=False,key=lambda d:d[‘age’]))
总结:定义函数与循环结构的综合应用
熟悉变量的结构,key中的变量实际上是字典,也同样是列表中的元素。实际上只是多了一部key的判断

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: C语言中的sort()函数可以通过调整比较函数的返回值来实现升序降序排序。比较函数是sort()函数一个参数,它用来判断两个元素的大小关系。 在升序排序中,比较函数应返回一个负数、0或正数来表示第一个元素小于、等于或大于第二个元素。如果我们想要在相等的情况下降序排序,我们可以在比较函数中调换两个元素的位置。这样,在相等的情况下返回正数,就会使得相等的元素按降序排列。 下面是一个示例,对一个整型数组进行排序,按升序排序,并在相等的情况下按降序排序。 ```c #include <stdio.h> #include <stdlib.h> int cmp(const void* a, const void* b) { int num1 = *(const int*)a; int num2 = *(const int*)b; if (num1 < num2) return -1; else if (num1 > num2) return 1; else return num2 - num1; // 在相等的情况下返回正数,实现降序排序 } int main() { int nums[] = {5, 2, 8, 6, 1}; int size = sizeof(nums) / sizeof(nums[0]); qsort(nums, size, sizeof(nums[0]), cmp); for (int i = 0; i < size; i++) { printf("%d ", nums[i]); } return 0; } ``` 输出结果为:1 2 5 6 8,即按升序排序。 ### 回答2: 在C语言中,可以使用qsort()函数实现升序排序和相等时降序排序的功能。 qsort()函数是C标准库中的一个快速排序函数,可以对任意类型数组进行排序。它的原型定义如下: ```c void qsort(void *base, size_t nmemb, size_t size, int (*compar)(const void *, const void *)); ``` 其中,参数解释如下: - base:指向要排序数组的第一个元素的指针。 - nmemb:数组中的元素个数。 - size:每个元素的大小(以字节为单位)。 - compar:比较函数的指针,用于确定元素之间的顺序。 比较函数的原型定义如下: ```c int compar(const void *a, const void *b); ``` 在比较函数中,如果返回值小于0,则认为a<b;如果返回值大于0,则认为a>b;如果返回值等于0,则认为a=b。 要实现升序排序和相等时降序排序的功能,只需在比较函数中做一些特殊的判断即可。 下面是一个示例代码,展示如何使用qsort()函数实现这种排序功能: ```c #include <stdio.h> #include <stdlib.h> int compar(const void *a, const void *b) { int x = *(int *)a; int y = *(int *)b; if (x < y) { return -1; // 升序 } else if (x > y) { return 1; // 升序 } else { return y - x; // 相等时降序 } } int main() { int arr[] = {5, 2, 8, 2, 1}; qsort(arr, sizeof(arr) / sizeof(arr[0]), sizeof(arr[0]), compar); for (int i = 0; i < sizeof(arr) / sizeof(arr[0]); i++) { printf("%d ", arr[i]); } return 0; } ``` 以上代码中,比较函数先判断两个元素的大小关系,如果不相等则按升序排序;如果相等,则按照降序排序。 运行结果如下: ``` 1 2 2 5 8 ``` 这样就实现了在C语言中使用qsort()函数进行升序排序,相等时降序排序的功能。 ### 回答3: c sort是C语言中提供的一个排序函数,用于对数组进行排序。默认情况下,c sort函数会按照升序的方式对数组元素进行排序。 但是如果数组中存在相等的元素,c sort函数的默认行为是保持它们的相对顺序。也就是说,相等的元素在排序后的数组中仍然会保持原来的相对位置。 如果需要在相等元素之间按照降序排序,可以通过自定义比较函数实现。比较函数可以作为参数传递给c sort函数,用于确定元素之间的比较规则。 比较函数需要满足以下条件: 1. 如果a小于b,则返回负值; 2. 如果a等于b,则返回0; 3. 如果a大于b,则返回正值。 当c sort函数需要比较两个元素时,会调用比较函数来确定它们之间的大小关系。根据比较函数的返回值,c sort函数会按照不同的顺序将元素进行排序。 所以,如果想要使c sort函数排序过程中,相等的元素按照降序排序,只需要编写一个合适的比较函数,并将其作为参数传递给c sort函数即可。比较函数可以根据需要对相等元素的顺序进行调整,以实现相等降序排序效果。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值