qsort排序使用

 qsort排序 int型:

#include<stdio.h>
#include<stdlib.h>


int cmp(void const *a,void const *b)
{
 return *((int *) a)-*((int *) b);
}


int main()
{
 int a[100],i,n;
 scanf("%d",&n);
 for(i=0;i<n;i++)
  scanf("%d",&a[i]);
 qsort(a,n,sizeof(a[0]),cmp);
 for(i=0;i<n;i++)
  printf("%d ",a[i]);
 return 0;
}

 

qsort排序 字符排序:

#include<stdio.h>
#include<stdlib.h>
#include<string.h>


int cmp(void const *a,void const *b)
{
 return *((char *) a)-*((char *) b);
}


int main()
{
 char a[100];
 int i,n;
    scanf("%s",a);
 n=strlen(a);
 qsort(a,n,sizeof(a[0]),cmp);
 for(i=0;i<n;i++)
  printf("%c ",a[i]);
 printf("\n");
 return 0;
}

 

 

 

 

 

qsort是C语言标准库中提供的排序函数,可以对任意类型的数据进行排序。对链表使用qsort排序的一般步骤如下: 1. 定义一个比较函数,用于比较两个链表节点的值大小。 2. 将链表中的节点的值复制到一个数组中。 3. 使用qsort函数对数组进行排序。 4. 将排序后的数组中的值赋回到链表节点中。 下面是一个示例代码,用于对单向链表中的整数进行排序: ```c #include <stdio.h> #include <stdlib.h> // 定义链表节点结构体 typedef struct node { int val; struct node *next; } Node; // 定义比较函数 int cmp(const void *a, const void *b) { int *pa = (int *)a; int *pb = (int *)b; return *pa - *pb; } // 对链表进行排序 void sortList(Node *head) { // 统计链表长度 int len = 0; Node *p = head; while (p) { len++; p = p->next; } // 将链表节点的值复制到数组中 int *arr = (int *)malloc(len * sizeof(int)); p = head; for (int i = 0; i < len; i++) { arr[i] = p->val; p = p->next; } // 对数组进行排序 qsort(arr, len, sizeof(int), cmp); // 将排序后的值赋回到链表节点中 p = head; for (int i = 0; i < len; i++) { p->val = arr[i]; p = p->next; } free(arr); } // 创建链表 Node *createList(int arr[], int n) { Node *head = NULL; for (int i = n - 1; i >= 0; i--) { Node *p = (Node *)malloc(sizeof(Node)); p->val = arr[i]; p->next = head; head = p; } return head; } // 打印链表 void printList(Node *head) { Node *p = head; while (p) { printf("%d ", p->val); p = p->next; } printf("\n"); } int main() { int arr[] = {5, 2, 8, 3, 6}; int n = sizeof(arr) / sizeof(int); Node *head = createList(arr, n); printf("原链表:"); printList(head); sortList(head); printf("排序后的链表:"); printList(head); return 0; } ``` 输出结果为: ``` 原链表:5 2 8 3 6 排序后的链表:2 3 5 6 8 ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值