功 能: 快速排序
头文件:stdlib.h
用 法: void qsort(void *base,int nelem,int width,int (*fcmp)(const void *,const void *));
参数: 
1 待排序数组首元素的地址 
2 数组中待排序元素数量
3 各元素的占用空间大小
4 指向函数的指针,用于确定排序的顺序

注意:数组中可以存储数字,字符,或者结构体都行。

数字:

 #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进行快速排序的更多相关文章

  1. java排序算法(五):快速排序

    java排序算法(五):快速排序 快速排序是一个速度非常快的交换排序算法,它的基本思路很简单,从待排的数据序列中任取一个数据(如第一个数据)作为分界值,所有比它小的元素放到左边.所有比它大的元素放到右 ...

  2. [Swift]八大排序算法(二):快速排序

    排序分为内部排序和外部排序. 内部排序:是指待排序列完全存放在内存中所进行的排序过程,适合不太大的元素序列. 外部排序:指的是大文件的排序,即待排序的记录存储在外存储器上,待排序的文件无法一次装入内存 ...

  3. 【PHP面试题】通俗易懂的两个面试必问的排序算法讲解:冒泡排序和快速排序

    又到了金三银四找工作的时间,相信很多开发者都在找工作或者准备着找工作了.一般应对面试,我们无可厚非的去刷下面试题.对于PHPer来说,除了要熟悉自己所做的项目,还有懂的基本的算法.下面来分享下PHP面 ...

  4. 排序算法——交换排序(冒泡排序、快速排序)(java)

    一.冒泡排序 时间复杂度:O(n^2) 公认最慢的排序,每次把最大/最小的放一边,原理: [57,68,59,52] [57,68,59,52] [57,59,68,52] [57,59,52,68] ...

  5. 排序算法总结(四)快速排序【QUICK SORT】

    感觉自己这几篇都是主要参考的Wikipedia上的,快排就更加是了....wiki上的快排挺清晰并且容易理解的,需要注意的地方我也添加上了注释,大家可以直接看代码.需要注意的是,wikipedia上快 ...

  6. 数据结构和算法(Golang实现)(25)排序算法-快速排序

    快速排序 快速排序是一种分治策略的排序算法,是由英国计算机科学家Tony Hoare发明的, 该算法被发布在1961年的Communications of the ACM 国际计算机学会月刊. 注:A ...

  7. 常用排序算法的python实现和性能分析

    常用排序算法的python实现和性能分析 一年一度的换工作高峰又到了,HR大概每天都塞几份简历过来,基本上一天安排两个面试的话,当天就只能加班干活了.趁着面试别人的机会,自己也把一些基础算法和一些面试 ...

  8. java实现八大排序算法

    Arrays.sort() 采用了2种排序算法 -- 基本类型数据使用快速排序法,对象数组使用归并排序. java的Collections.sort算法调用的是归并排序,它是稳定排序 方法一:直接插入 ...

  9. 【Python】常用排序算法的python实现和性能分析

    作者:waterxi 原文链接 背景 一年一度的换工作高峰又到了,HR大概每天都塞几份简历过来,基本上一天安排两个面试的话,当天就只能加班干活了.趁着面试别人的机会,自己也把一些基础算法和一些面试题整 ...

随机推荐

  1. C++内存对齐总结

    大家都知道,C++空类的内存大小为1字节,为了保证其对象拥有彼此独立的内存地址.非空类的大小与类中非静态成员变量和虚函数表的多少有关. 而值得注意的是,类中非静态成员变量的大小与编译器内存对齐的设置有 ...

  2. Jquery 搭配 css 使用,简单有效

    前几篇博客中讲了Jquery的基础和点击实际,下面来说一下和css搭配着来怎么做 还是和往常一样,举个例子 好几个方块,然后设置颜色 <!DOCTYPE html PUBLIC "-/ ...

  3. Js 原型和原型链

    Js中通过原型和原型链实现了继承 Js对象属性的访问,首先会查找自身是否拥有这个属性 如果查到,则返回属性值,如果找不到,就会遍历原型链,一层一层的查找,如果找到就会返回属性值 直到遍历完Object ...

  4. javascript数组查重方法总结

    文章参考地址:http://blog.csdn.net/chengxuyuan20100425/article/details/8497277 题目 对下列数组去重: var arr = ['aa', ...

  5. Mac上MySQL忘记root密码且没有权限的处理办法&workbench的一些tips (转)

    忘记Root密码肿么办 Mac上安装MySQL就不多说了,去mysql的官网上下载最新的mysql包以及workbench,先安装哪个影响都不大.如果你是第一次安装,在mysql安装完成之后,会弹出来 ...

  6. WebSocket - ( 一.概述 )

    说到 WebSocket,不得不提 HTML5,作为近年来Web技术领域最大的改进与变化,包含CSS3.离线与存储.多媒体.连接性( Connectivity )等一系列领域,而即将介绍的 WebSo ...

  7. continue break 区别

    在循环中有两种循环方式 continue , break continue 只是跳出本次循环, 不在继续往下走, 还是开始下一次循环 break  将会跳出整个循环, 此循环将会被终止 count = ...

  8. keepalive的不足,如何处理

    MySQL(或者其它服务)的keepalived高可用监控脚本 开发脚本需求:我们知道,keepalive是基于虚拟ip的存活来判断是否抢占master的机制的,但是如果我们做了MySQL的keepa ...

  9. C#与C++的发展历程第二 - C#4.0再接再厉

    系列文章目录 1. C#与C++的发展历程第一 - 由C#3.0起 2. C#与C++的发展历程第二 - C#4.0再接再厉 开始本系列的第二篇,这篇文章中将介绍C#4.0中一些变化,如C++有类似功 ...

  10. useful commands for docker beginner

    You may want to add my wechat public account or add my technical blog's RSS feed This list is meant ...