qsort函数的应用

简介: qsort函数的应用

C语言中对数据进行排序,但数据类型有很多种,比如整形,字符型,浮点型,结构体型等等,


用冒泡排序只能对一种类型进行排序,很不方便,这就需要一个强大的函数了。


qsort可以对各种类型的数据进行排序,但要用合理的方法去用它


qsort的使用


void qsort (void* base, size_t num, size_t size,

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



qsort需要四个参数,前三个很好理解,第四个参数用来比较两个元素,返回的整形。

qsort 的使用


代码示例:

//比较两个数的大小
int int_cmp(const void* p1, const void* p2)
{
  return *(int*)p1 - *(int*)p2;
}
//打印数组
void print(int* arr,int sz)
{
  int i = 0;
  for (i = 0; i < sz; i++)
  {
    printf("%d ", *(arr + i));
  }
  printf("\n"); 
 
}
 
#include<stdio.h>
int main()
{
  int arr[10] = { 2,4,1,4,8,6,5,9,7,5 };
  int sz = sizeof(arr) / sizeof(arr[0]);
  int width = sizeof(int);
  printf("排序前:");
  print(arr, sz);
 
  qsort(arr, sz, width, int_cmp);
 
  printf("排序后:");
 
  print(arr,sz);
 
  return 0;
}


用冒泡排序模拟qsort 的实现




因为qsort可以排列不同类型的数据,所以int_comp函数里要用void*指针来接收




进行交换,注意要转化成char类型!

最后浅浅打印一下



完整代码:

#include<stdio.h>
 
int int_comp(const void* p1, const void* p2)
{
  return *((int*)p1) - *((int*)p2);
}
 
 
void swap(void* e1, void* e2, int width)
{
  int i = 0;
  for (i = 0; i < width; i ++ )
  {
    char tem = *((char*)e1 + i);
    *((char*)e1 + i) = *((char*)e2 + i);
    *((char*)e2 + i) =  tem;
 
  }
}
void _qsort(void* arr, int sz, int width, int(*comp)(void* p1, void* p2))
{
  int i = 0;
  for (i = 0; i < sz - 1; i++)
  {
    int j = 0;
    for (j = 0; j < sz - 1 - i; j++)
    {
      if (comp((char*)arr+j*width, (char*)arr + (j+1) * width) > 0)
      {
        swap((char*)arr + j * width, (char*)arr + (j + 1) * width, width);
      }
    }
  }
}
 
 
void print(int arr[],int sz)
{
  int i = 0;
  for (i = 0; i < sz; i++)
  {
    printf("%d ", arr[i]);
  }
  printf("\n");
}
 
int main()
{
  //qsort的模拟
  //排列整型
  int arr[10] = { 9,8,7,6,5,4,3,2,1,0 };
  int sz = sizeof(arr) / sizeof(arr[0]);
  int width = sizeof(int);
 
  print(arr, sz);
 
  _qsort(arr, sz, width, int_comp);
 
  print(arr, sz);
 
  return 0;
}


这个模拟qsort函数也是很强大的,这里只排序了整形,还可以排序字符型,结构体等等。

这是我对qsort函数的一些理解。

相关文章
|
7月前
qsort函数专题
qsort函数专题
41 2
|
C语言
C语言之冒泡法对数组元素进行排序
C语言之冒泡法对数组元素进行排序
|
7月前
|
搜索推荐 算法 C语言
冒泡排序:从小到大轻松搞定数组排序(c语言代码)
冒泡排序:从小到大轻松搞定数组排序(c语言代码)
275 0
|
7月前
|
算法
指针(6)---qsort函数
指针(6)---qsort函数
37 0
qsort函数和模拟实现qsort函数
qsort函数和模拟实现qsort函数
|
7月前
|
搜索推荐
【qsort函数实现】
【qsort函数实现】
|
7月前
|
JavaScript 前端开发
sort函数排序
sort函数排序
64 0
sort函数排序
|
7月前
|
算法 搜索推荐 C语言
快速排序和qsort函数详解详解qsort函数
快速排序和qsort函数详解详解qsort函数
108 0
|
容器
sort函数
sort函数
|
搜索推荐 C语言
qsort函数的讲解
qsort函数的讲解
61 0