`
tudusi
  • 浏览: 1085314 次
文章分类
社区版块
存档分类
最新评论

C程序快速排序之qsort()

 
阅读更多
qsort包含在<stdlib.h>头文件中,此函数根据你给的比较条件进行快速排序,通过指针移动实现排序。其排序是根据二分法写的,其时间复杂度为n*log(n)。排序之后的结果仍然放在原数组中。使用qsort函数必须自己写一个比较函数。
其实qsort的用法跟sort十分的相像。关于sort的用法见下一篇文章。

函数原型:

void qsort ( void * base, size_t num, size_t size, int ( * comparator ) ( const void *, const void * ) );

用法以及参数说明:

base:Pointer to the first element of the array to be sorted.(数组起始地址)
num:Number of elements in the array pointed by base.(数组元素个数)
size:Size in bytes of each element in the array.(每一个元素的大小)
comparator: Function that compares two elements.(函数指针,指向比较函数)
1、The function must accept two parameters that are pointers to elements, type-casted as void*. These parameters should be cast back to some data type and be compared.
2、The return value of this function should represent whether elem1 is considered less than, equal to, or greater than elem2 by returning, respectively, a negative value, zero or a positive value.
Return Value none (无返回值)

用法举例:

一、对int类型数组排序

int num[100];

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

qsort(num, 100, sizeof(num[0]), cmp);

二、对char类型数组排序(同int类型)

char word[100];

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

qsort(word,100,sizeof(word[0]),cmp);


三、对double类型数组排序

double in[100];

int cmp( const void *a , const void *b )
{
return *(double *)a > *(double *)b ? 1 : -1;//因为自定义函数的返回值必须是int型,所以这里不能直接相减
}

qsort(in,100,sizeof(in[0]),cmp);

四、对结构体一级排序

struct Sample
{
double data;
int other;
}s[100]

//按照data的值从小到大将结构体排序

int cmp( const void *a ,const void *b)
{
return (*(Sample *)a).data > (*(Sample *)b).data ? 1 : -1;
}

qsort(s,100,sizeof(s[0]),cmp);

五、对结构体二级排序

struct Sample
{
int x;
int y;
}s[100];

//按照x从小到大排序,当x相等时按照y从大到小排序

int cmp( const void *a , const void *b )
{
struct Sample *c = (Sample *)a;
struct Sample *d = (Sample *)b;
if(c->x != d->x) return c->x - d->x;
else return d->y - c->y;
}

qsort(s,100,sizeof(s[0]),cmp);

六、对字符串进行排序

struct Sample
{
int data;
char str[100];
}s[100];

//按照结构体中字符串str的字典顺序排序

int cmp ( const void *a , const void *b )
{
return strcmp( (*(Sample *)a).str , (*(Sample *)b).str );
}

qsort(s,100,sizeof(s[0]),cmp);

七、对字符串二维数组排序:

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

char s[2001][1001];

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

int main(){
int i,n;
scanf("%d",&n);
getchar();
for(i=0;i<n;i++) gets(s[i]);
qsort(s,n,1001*sizeof(char),cmp);
for(i=0;i<n;i++) puts(s[i]);
return 0;
}
分享到:
评论

相关推荐

    快速排序库函数qsort的调用细则

    快速排序库函数qsort的调用细则 快速排序库函数qsort是C标准库中的一种排序算法,用于对数组进行排序。qsort函数包含在头文件中,需要在函数头部加上#include以便调用。qsort函数有四个参数,分别是参与排序的数组...

    qsort/快速排序C/C++实现

    ### qsort/快速排序C/C++实现 #### 知识点概述 本篇文章将详细介绍一个用C语言编写的快速排序算法实现。快速排序是一种高效的排序算法,在平均情况下具有O(n log n)的时间复杂度,因此在实际应用中非常广泛。本...

    C语言实现多种链表快速排序

    在给定的文件中,`快速排序.cpp`可能包含了具体的C语言实现代码,`qsort.h`可能是自定义的快速排序函数头文件,用于处理链表数据。`vcxproj`文件是Visual Studio项目文件,用于编译和管理源代码,而`.filters`和`....

    数据结构 快速排序 输出每一趟结果

    根据给定文件的信息,我们可以总结出以下关于“数据结构 快速排序 输出每一趟结果”的知识点: ### 一、快速排序的基本概念 快速排序是一种高效的排序算法,采用分治法策略来把一个序列分为较小和较大的两个子序列...

    快速排序程序

    - `qsort.cpp` 文件很可能是快速排序算法的实现,包含了函数定义和主程序。 - `qsort.dsp` 和 `qsort.dsw` 可能是旧版的Microsoft Visual Studio项目文件,用于管理和构建程序。 - `qsort.ncb` 是Visual Studio的...

    VC中qsort源代码

    在VC(Visual C++)环境中,`qsort`函数是C/C++标准库中用于数组排序的关键函数之一,其内部实现采用了快速排序算法。本文将深入分析VC中`qsort`源代码的核心逻辑、算法设计以及其实现细节。 #### 快速排序算法简介...

    七种qsort排序方法

    `qsort`是C语言标准库中的一个函数,用于对数组进行快速排序。它提供了极大的灵活性,允许用户自定义比较函数来处理不同类型的数据。本文将详细介绍七种常见的`qsort`排序方法及其应用场景。 #### 二、基础知识 `...

    分离出的微软qsort算法

    `qsort`函数在C语言中被广泛用于对数组进行快速排序,它是一个通用的排序算法,适用于各种数据类型。在微软的实现中,可能对性能进行了特定的优化,以适应Windows环境或特定的硬件平台,从而在某些情况下表现出比C...

    qsort C语言版

    `qsort` 是一个在 C 语言标准库 `&lt;stdlib.h&gt;` 中定义的函数,用于对数组进行快速排序。它是一个非常强大的工具,可以用来对多种数据类型进行排序,包括基本数据类型如 `int`, `char`, `double` 以及复杂数据类型如...

    qsort

    qsort之所以成为C语言标准库中的排序函数,不仅因为其基于快速排序算法的高效性,还因为它允许用户自定义比较函数,这使得qsort能够处理各种数据类型和复杂的数据结构。同时,内联函数的使用减少了函数调用开销,...

    qsort的详细用法

    这个示例展示了快速排序的基本框架,但实际应用中,通常直接使用`qsort`更为便捷。 ##### 示例2:对int数组排序 ```c int cmp(const void *a, const void *b) { return (*(int *)a - *(int *)b); } ``` 在这个...

    五种排序算法

    这五种算法分别是桶排序、快速排序、归并排序、插入排序和qsort函数。每种算法都有其适用场景、优缺点、时间复杂度和空间复杂度。理解这些算法对于提升编程技能和解决实际问题具有重要意义。 1. 桶排序法(Bucket ...

    快速排序

    快速排序是一种高效的排序算法,由英国计算机科学家托尼·霍尔于1960年提出。它采用分治策略来把一个序列分为较小的两个子序列,然后递归地排序两个子序列。快速排序在平均情况下具有O(n log n)的时间复杂度,这使得...

    qsort函数常见用法v1.1

    `qsort`函数是C语言标准库中用于通用数组排序的一个强大工具,它使用快速排序算法,提供了高度灵活的排序机制。`qsort`的原型在`&lt;stdlib.h&gt;`头文件中定义,其通用性使得它可以处理任何类型的数据,只要用户能够提供...

    快速排序C语言代码可以调试出来得

    `QSort`函数递归地对子序列进行快速排序。`main`函数处理用户输入并调用排序。 快速排序的时间复杂度在平均情况下为O(n log n),最坏情况下为O(n^2),但这种情况在实际应用中很少出现。由于快速排序是原地排序且...

    POJ1002-487-3279【Hash+Qsort】

    1. "POJ1002-487-3279【Hash+Qsort】.cpp":这可能是主程序,包含了使用哈希表和快速排序解决整个问题的代码。 2. "POJ1002-487-3279【Qsort】.cpp":这个可能是单独实现快速排序部分的代码,可能用于比较不同的排序...

    快速排序实验报告.docx

    - **快速排序实现**:`Qsort` 函数为核心排序逻辑。 ```c void Qsort(int a[], int l, int r, int n) { if (l &gt;= r) return; int mid = (l + r) &gt;&gt; 1; int p = ask(a, l, mid, r); // 选择枢轴 swap(&a[p], &...

    快速排序的一个算法(一个例子)

    ### 快速排序算法解析及实现 ...快速排序的时间复杂度平均情况下为O(nlogn),最坏情况下为O(n^2),但由于其内部循环较少且递归深度较浅,因此实际效率非常高,是许多应用场景中的首选排序算法之一。

    多进程实现快速排序(北京大学操作系统课程实习)

    1. 在Windows环境下,编写一个多进程实现快速排序的程序。 2. 使用包含1,000,000个随机数的文件作为输入。 3. 描述程序运行所需的系统资源配置。 4. 提供测试结果并对其进行分析。 #### 设计思路 本实验采取以下...

    qsort函数常见用法

    qsort 函数的实现原理是使用快速排序算法,通过递归地将数组分成两个部分,然后对每个部分进行排序,最终将整个数组排序。 在使用 qsort 函数时,需要提供一个比较函数 `cmp`,该函数用于比较两个元素的大小。比较...

Global site tag (gtag.js) - Google Analytics