用冒泡模拟qsort的实现

简介: 用冒泡模拟qsort的实现

根据查阅可以看到qsort的参数和每个参数的作用;

void swap(void* p1, void* p2, int sz)//通过冒泡排序,比较后满足条件要交换数组顺序
{
  for (int i = 0; i < sz; i++)//对每个字符进行交换
  {
    char temp = *((char*)p1 + i);
    *((char*)p1 + i) = *((char*)p2 + i);
    *((char*)p2 + i) = temp;
  }
}
void myqsort(void* base, int num, int sz, int (*compare)(const void*, const void*))
{
  for (int i = 0; i < num; i++)
  {
    for (int j = 0; j < num - i-1; j++)//冒泡排序的原理
    {
      if (compare((char*)base + sz * j, (char*)base + sz * (j + 1) )> 0)
      {//强制转换成char*去寻找每个数组的位置
        swap((char*)base + sz * j, (char*)base + sz * (j + 1),sz);//交换
      }
    }
  }
}

这样就把myqsort实现完成,下面用例子进行测试

struct stu//创造一个结构体
{
  char name[20];
  int age;
};
int cmp(const void*a,const void*b)
{
  return *(int*)a - *(int*)b;//对整形从小到大排序
}
int cmpstu(const void* a, const void* b)
{//通过结构体的age排序
  return ((stu*)a)->age-((stu*)b)->age;
}
int cmpst(const void* a, const void* b)
{//通过结构体的name的ascll码值比较
  return strcmp(((stu*)a)->name, ((stu*)b)->name);
}
int main()
{
  stu b[5] = { "abc",6,"bcd",7,"fes",8,"afe",3,"eafa",2};
  int a[5] = { 3,6,2,1,8 };
  myqsort(a, 5, sizeof(int),cmp);
  myqsort(b, 5, sizeof(stu), cmpstu);
  for (int i = 0; i < 5; i++)
    cout << a[i]<<' ';
  cout << endl;
  cout << "结构体age排序";
  for (int i = 0; i < 5; i++)
    cout << b[i].name<<' '<<b[i].age <<endl;
  myqsort(b, 5, sizeof(stu), cmpst);
  cout << "结构体name排序";
  for (int i = 0; i < 5; i++)
    cout << b[i].name << ' ' << b[i].age << endl;
    return 0;
}

测试结果

目录
相关文章
|
2月前
|
C++
指针中的回调函数与qsort的深度理解与模拟
本文详细介绍了回调函数的概念及其在计算器简化中的应用,以及C++标准库函数qsort的原理和使用示例,包括冒泡排序的模拟实现。
22 1
|
6月前
|
搜索推荐 C语言
模拟实现qsort函数:冒泡排序详解
模拟实现qsort函数:冒泡排序详解
39 1
|
7月前
|
C语言
qsort函数排序+冒泡模拟实现
qsort函数排序+冒泡模拟实现
|
7月前
|
搜索推荐 C语言
冒泡排序模拟实现qsort()函数
冒泡排序模拟实现qsort()函数
44 0
|
程序员
qsort函数的模拟实现
qsort函数的模拟实现
55 1
|
存储 算法 测试技术
深入解析 qsort 函数(下),用冒泡排序模拟实现 qsort 函数
深入解析 qsort 函数(下),用冒泡排序模拟实现 qsort 函数
50 0
|
搜索推荐 C语言
深入理解回调函数qsort:从入门到模拟实现(上)
深入理解回调函数qsort:从入门到模拟实现(上)
87 0
|
C语言 C++
深入理解回调函数qsort:从入门到模拟实现(下)
深入理解回调函数qsort:从入门到模拟实现(下)
47 0
|
算法 搜索推荐 JavaScript
冒泡实现qsort
冒泡算法 qsort函数
|
C语言
qsort函数的使用和模拟实现
qsort函数的使用和模拟实现
65 0
qsort函数的使用和模拟实现