【算法篇】排序——快速排序(c语言)

更新时间:2023-04-20 21:20:33 阅读: 评论:0


2023年4月20日发(作者:周期函数)

【算法篇】排序——快速排序(c语⾔)

【算法篇】排序——快速排序(c语⾔)

核⼼思想

排序算法的思想⾮常简单,在待排序的数列中,⾸先要找⼀个数字作为基准数(这只是个专⽤名词)。为了⽅便,我们⼀般选择第 1

个数字作为基准数(其实可以随便选)。然后把这个待排序的数列中⼩于基准数的元素移动到它的左边,⼤于它的移到右边。这时,左

右两个分区的元素就相对有序了;接着把两个分区的元素分别重复上述步骤,直到各个分区只有⼀个数时为⽌。

代码⽰例

void swap(int *a, int *b)

{

int tmp;

tmp = *a;

*a = *b;

*b = tmp;

}

void quick_sort(int l, int r)

{

int mid = in[(l + r) / 2];//

这⾥是选择中间值作为基准

int i = l, j = r;

do

{

while (in[i] < mid)

顺帝 i++; //

找到左边⽐基准值⼤的数的位置

while (in[j] > mid)

j--; //

找右红萝卜丝 边⼩的

if (i <= j)

{

swap(&(in[i]), &(in[j])); //

交换使左边的⼩右边的⼤

i++;

j--;

}

} while (i <= j);

if(l<j)

quick_sort(l, j);//

排左边

if(r>i)

quick_sort(i, r);//

排右边

}

当然了⼀般情况下不⽤⾃⼰写(毕竟有现成的)

来看⼀下炒鸡好⽤的qsort函数

qsort函数的⽤法

函数声明

void qsort(void *ba, size_t nitems, size_t size, int (*compar)(const void ))

, const void

参数说明

ba-- 指向要排序的数组的第⼀个元素的指针。

nitems-- 由 ba 指向的数组中元素的个数。

size-- 数组中每个元素的⼤⼩,以字节为单位。

compar-- ⽤来⽐较两个元素的函数,即函数指针(回调函数)

compar函数的形式决定了对谁排序

int compar(const void *p1, const void *p2);

compar函数的返回值描述

<0p1所指向元素将被排在p2所指向元素的左⾯

=0p1所指向元素与p2所指向元素的顺序不确定

>0p1所指向元素会被排在出发英文 p2所指向元素的右⾯

具体⽤法说明

对⼀维数组

int comp(const void*a,const void*b)

{

return *(int*)a-*(int*)b;

}

对⼆维数组

int comp(const void*a,const void*b)

{

return ((int*)a)[0]-((int*)b)[0];

}

对字符串

int Comp(const void*p1,const void*p2)

{

return strcmp((char*)p2,(char*)p1);

}

int main()

海南陵水旅游攻略 {

char a[MAX1][MAX2];

initial(a);

qsort(a,lenth,sizeof(a[0]),Comp);

//lentha

为数组的长度

}

对结构体⼀级排序

struct Node

{

double data;

int other;

}s[100];

int Comp(constvoid*p1,constvoid*p2)

{

return(*(Node*)p2红楼梦阅读感想 ).data>(*Node*p1).data?1:-1;

}

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

对结构体多级排序

struct Node

{

int x;

int y;

}s[100];

//xxy

按照从⼩到⼤排序,当相等时按从⼤到⼩排序

int Comp(const void*p1,const void*p2)

{

struct Node*c=(Node*)p1;

struct 玉树的养殖方法 Node*d=(Node*)p2;

if(c->x!=d->x)returnc->x-d->x;

el return d->y-c->y;

}

对结构体的字符串

日本spa struct Node

{

int data;

char str[100];

}s[100];

//str

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

int Comp(const void*p1,const void*p2)

{

return strcmp((*(Node*)p1).str,(*(Node*)p2).str);

}

qsort(s数据库技术与应用 ,100,sizeof(s[0]),Comp);


本文发布于:2023-04-20 21:20:33,感谢您对本站的认可!

本文链接:https://www.wtabcd.cn/fanwen/fan/82/506530.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

相关文章
留言与评论(共有 0 条评论)
   
验证码:
推荐文章
排行榜
Copyright ©2019-2022 Comsenz Inc.Powered by © 专利检索| 网站地图