排序算法----调用库函数qsort进行快速排序
注意:数组中可以存储数字,字符,或者结构体都行。
数字:
#include <stdio.h>
#include <stdlib.h> int compInc(const void *a, const void *b)
{
return *(int *)a - *(int *)b;
} int compDec(const void *a, const void *b)
{
return *(int *)b - *(int *)a;
} int main()
{
int a[] = { ,,,, };
int len = ;
int i; printf("递增排序结果:\n");
qsort(a, len, sizeof(a[]), compDec);
for (i = ; i < len; i++)
{
printf("%d ", a[i]);
}
printf("\n"); return ;
}
字符串长度排序:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define M 12
#define N 20 int compareInc(const void *a, const void *b)
{
return strlen((char *)a) - strlen((char*)b);//字符串长度比较
} int compareDec(const void *a, const void *b)
{
return strlen((char *)b) - strlen((char*)a);
} int main(void)
{
int i;
char s[M][N] =
{
"January",
"February",
"March",
"April",
"May",
"June",
"July",
"August",
"September",
"October",
"November",
"December"
}; qsort(s, M, sizeof(char) * N, compareInc);
for (i = ; i < M; i++)
printf("%s\n", s[i]); printf("\n"); qsort(s, M, sizeof(char) * N, compareDec);
for (i = ; i < M; i++)
printf("%s\n", s[i]); return ;
}
字符串大小排序:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define M 12
#define N 20 int compare1(const void *a, const void *b)
{
return *(char *)a - *(char*)b;//字符串大小比较
} int compare2(const void *a, const void *b)
{
return *(char *)b - *(char*)a;
} int main(void)
{
int i;
char s[M][N] =
{
"January",
"February",
"March",
"April",
"May",
"June",
"July",
"August",
"September",
"October",
"November",
"December"
}; qsort(s, M, sizeof(char) * N, compare1);
for (i = ; i < M; i++)
printf("%s\n", s[i]); printf("\n"); qsort(s, M, sizeof(char) * N, compare2);
for (i = ; i < M; i++)
printf("%s\n", s[i]); return ;
}
结构体:
#include <stdio.h>
#include <stdlib.h>
#define N 6 typedef struct
{
char name[];
int score; }Student; int compare1(const void *a, const void *b)
{
return ((Student*)a)->score - ((Student*)b)->score;//以结构体的成绩排序
} int compare2(const void *a, const void *b)
{
return *(((Student*)a)->name) - *(((Student*)b)->name);//以结构体的学生姓名排序
} void print(Student s)
{
printf("%-15s : %d\n", s.name, s.score);
} int main()
{
Student s[N] =
{
"Zhang San", ,
"Li Si", ,
"You", ,
"I", ,
"He", ,
"She",
}; int i;
qsort(s, N, sizeof(Student), compare1);
for (i = ; i < N; i++)
{
print(s[i]);
} printf("\n"); qsort(s, N, sizeof(Student), compare2);
for (i = ; i < N; i++)
{
print(s[i]);
} return ;
}
排序算法----调用库函数qsort进行快速排序的更多相关文章
- java排序算法(五):快速排序
java排序算法(五):快速排序 快速排序是一个速度非常快的交换排序算法,它的基本思路很简单,从待排的数据序列中任取一个数据(如第一个数据)作为分界值,所有比它小的元素放到左边.所有比它大的元素放到右 ...
- [Swift]八大排序算法(二):快速排序
排序分为内部排序和外部排序. 内部排序:是指待排序列完全存放在内存中所进行的排序过程,适合不太大的元素序列. 外部排序:指的是大文件的排序,即待排序的记录存储在外存储器上,待排序的文件无法一次装入内存 ...
- 【PHP面试题】通俗易懂的两个面试必问的排序算法讲解:冒泡排序和快速排序
又到了金三银四找工作的时间,相信很多开发者都在找工作或者准备着找工作了.一般应对面试,我们无可厚非的去刷下面试题.对于PHPer来说,除了要熟悉自己所做的项目,还有懂的基本的算法.下面来分享下PHP面 ...
- 排序算法——交换排序(冒泡排序、快速排序)(java)
一.冒泡排序 时间复杂度:O(n^2) 公认最慢的排序,每次把最大/最小的放一边,原理: [57,68,59,52] [57,68,59,52] [57,59,68,52] [57,59,52,68] ...
- 排序算法总结(四)快速排序【QUICK SORT】
感觉自己这几篇都是主要参考的Wikipedia上的,快排就更加是了....wiki上的快排挺清晰并且容易理解的,需要注意的地方我也添加上了注释,大家可以直接看代码.需要注意的是,wikipedia上快 ...
- 数据结构和算法(Golang实现)(25)排序算法-快速排序
快速排序 快速排序是一种分治策略的排序算法,是由英国计算机科学家Tony Hoare发明的, 该算法被发布在1961年的Communications of the ACM 国际计算机学会月刊. 注:A ...
- 常用排序算法的python实现和性能分析
常用排序算法的python实现和性能分析 一年一度的换工作高峰又到了,HR大概每天都塞几份简历过来,基本上一天安排两个面试的话,当天就只能加班干活了.趁着面试别人的机会,自己也把一些基础算法和一些面试 ...
- java实现八大排序算法
Arrays.sort() 采用了2种排序算法 -- 基本类型数据使用快速排序法,对象数组使用归并排序. java的Collections.sort算法调用的是归并排序,它是稳定排序 方法一:直接插入 ...
- 【Python】常用排序算法的python实现和性能分析
作者:waterxi 原文链接 背景 一年一度的换工作高峰又到了,HR大概每天都塞几份简历过来,基本上一天安排两个面试的话,当天就只能加班干活了.趁着面试别人的机会,自己也把一些基础算法和一些面试题整 ...
随机推荐
- Spark RDD 核心总结
摘要: 1.RDD的五大属性 1.1 partitions(分区) 1.2 partitioner(分区方法) 1.3 dependencies(依赖关系) 1.4 compute(获取分区迭代列表) ...
- SQL:指定名称查不到数据的衍伸~空格 换行符 回车符的批量处理
异常处理汇总-数据库系列 http://www.cnblogs.com/dunitian/p/4522990.html 先看看啥情况 复制查询到的数据,粘贴一下看看啥情况 那就批量处理一下~ 就这样 ...
- [APUE]UNIX进程的环境(上)
一. 前言 本章将学习:当执行程序时,其main函数是如何被调用的,命令行参数是如何传送给执行程序的,典型的存储器布局是什么样式,如何分配另外的存储空间,进程如何使用环境变量,进程终止的不同方式等.另 ...
- 破解SQLServer for Linux预览版的3.5GB内存限制 (UBUNTU篇)
在上一篇中我提到了如何破解RHEL上SQLServer的内存大小限制,但是Ubuntu上还有一道检查 这篇我将会讲解如何在3.5GB以下内存的Ubuntu中安装和运行SQLServer for Lin ...
- c#语言规范
0x00 分类 C#语言规范主要有两个来源,即我们熟知的ECMA规范和微软的规范.尽管C#的ECMA规范已经前后修订4次,但其内容仅仅到C# 2.0为止.所以慕容为了方便自己和各位方便查询,在此将常见 ...
- Could not evaluate expression
VS15 调试变量不能显示值,提示:Could not evaluate expression 解决办法: 选择"在调试时显示运行以单击编辑器中的按钮"重启VS即可. 可参考:Vi ...
- 完美解决CodeSmith无法获取MySQL表及列Description说明注释的方案
问题描述: CodeSmith是现在比较实用的代码生成器,但是我们发现一个问题: 使用CodeSmith编写MySQL模板的时候,会发现一个问题:MySQL数据表中的列说明获取不到,也就是column ...
- 聊聊从web session的共享到可扩展缓存设计
先从web session的共享说起 许多系统需要提供7*24小时服务,这类系统肯定需要考虑灾备问题,单台服务器如果宕机可能无法立马恢复使用,这必定影响到服务.这个问题对于系统规模来说,从小到大可 ...
- 【AutoMapper官方文档】DTO与Domin Model相互转换(下)
写在前面 AutoMapper目录: [AutoMapper官方文档]DTO与Domin Model相互转换(上) [AutoMapper官方文档]DTO与Domin Model相互转换(中) [Au ...
- 【腾讯Bugly干货分享】移动App入侵与逆向破解技术-iOS篇
本文来自于腾讯bugly开发者社区,非经作者同意,请勿转载,原文地址:http://dev.qq.com/topic/577e0acc896e9ebb6865f321 如果您有耐心看完这篇文章,您将懂 ...