排序之qsort函数

排序之qsort函数

qsort函数是C语言库提供的快速排序的库函数,位于头文件<stdlib.h>在一般应用的时候我们应该尽量选择使用库函数,因为库函数一般都是经过优化总结出来的C代码,这样也可以少写大篇幅的代码。

1.qsort函数之int型排序

注意C语言里没有布尔类型,一般为0值为假,非零值为真。

int array[100];

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

{     

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

}  

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

测试程序:

#include <stdio.h>

#include <stdlib.h>

#include <math.h>

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

{     

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

}  

int main(int argc, char **argv)

{

int array[100];

int i,j;

int p[2];

int key;

srand(time(0));

for(i = 0; i< 100; i++)

{

array[i] = rand()%100;

}

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

for(i = 0; i< 10; i++)

{

for(j=0; j<10; j++)

{

printf(" %d ", array[i*10+j]);

}

printf("\n");

}

return 0;

}

程序结果:

 0  1  1  2  4  6  7  7  8  8

 9  9  9  13  14  15  16  18  18  18

 18  19  23  23  24  24  24  26  26  26

 28  28  29  29  31  34  36  37  37  37

 37  39  39  39  40  40  42  42  44  46

 47  48  48  49  51  54  55  57  58  59

 59  60  63  63  63  64  65  65  65  66

 72  76  76  77  77  80  81  81  82  85

 86  87  87  87  89  89  89  90  90  90

 92  93  93  95  96  96  97  97  98  98

请按任意键继续. . .、、

2.qsort函数之char型排序(同int)

  char   word[100];     

  Sample:     

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

  {     

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

  } 

3.qsort函数之double型排序(特别注意

  double   in[100];     

    

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

  {     

   return   *(double   *)a   >   *(double   *)b   ?   1   :   -1;     

  }     

    

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

4.qsort函数之结构体型一级排序

 struct   In     

  {     

   double   data;     

   int   other;     

  }s[100]     

    

  //按照data的值从小到大将结构体排序,关于结构体内的排序关键数据data的类型可以很多种,参考上面的例子写     

    

  int   cmp(   const   void   *a   ,const   void   *B)     

  {     

   return   (*(In   *)a)->data   >   (*(In   *)B)->data   ?   1   :   -1;     

  }     

    

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

5.qsort函数之结构体型二级排序

 struct   In     

  {     

  int   x;     

  int   y;     

  }s[100];     

    

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

    

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

  {     

  struct   In   *c   =   (In   *)a;     

  struct   In   *d   =   (In   *)b;     

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

  else   return   d->y   -   c->y;     

  }     

    

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

6.qsort函数之字符串排序

 struct   In     

  {     

  int   data;     

  char   str[100];     

  }s[100];     

    

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

    

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

  {     

   return   strcmp(  (*(In   *)a)->str(*(In   *)B)->str   );     

  }     

    

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
回答: React中的setState方法是用来更新组件的状态的。根据引用\[1\],setState是异步的,所以在设置setState后,无法立即通过this.state获取最新状态。如果要获取最新的状态,需要在setState的回调函数中获取。另外,根据引用\[2\],setState方法会合并调用,即多次调用setState会被合并成一次更新。在React的生命周期和合成事件执行前后都有相应的钩子,分别是pre钩子和post钩子,根据引用\[3\],pre钩子会调用batchedUpdate方法将isBatchingUpdates变量置为true,开启批量更新,而post钩子会将isBatchingUpdates置为false。这样可以提高性能,减少不必要的渲染。总的来说,setState的执行过程是将更新的状态放入队列中,然后在适当的时机进行批量更新。 #### 引用[.reference_title] - *1* *3* [React - setState 原理](https://blog.csdn.net/kelly0721/article/details/117252206)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* [React解密:ReactsetState的运行原理是什么](https://blog.csdn.net/leelxp/article/details/108238766)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值