c库函数qsort运用和编写qsort函数

//运用qsort库函数对数组进行排序。
//void qsort(void* arr,传递数组名
//int size,元素个数int width,每个元素所占大小(字节)
//int (*pt)(const void* e1, const * e2)传递排序函数地址);
一.简单应用
#include<iostream>
int sort( const void* e1, const void* e2);
void print(int arr[], int size);
1)//排列int数组
int main()
{
  int arr[10] = { 2,5,4,4,8,5,7,9,7,45 };
   int size = sizeof(arr) / sizeof(int);
  int width = sizeof(int);
   qsort(arr, size, width, sort);
  输出升序后的元素
    print(arr, size);
  return 0;
}
int sort(const void* e1,const void* e2)
{
   return *(int*)e1 - *(int*)e2;//升序
}
void print(int arr[], int size)
{
   for (int i = 0; i < size; i++)
   cout << arr[i]<<" ";
}
//2.排列字符串
#include<iostream>
using namespace std;
int sort(const void* e1, const void* e2);
void print(char* arr, int size);
int main()
{
    char arr[10]{ "afgeyhgyp" };
    int size = sizeof(arr) / sizeof(char);
    qsort(arr, size-1, sizeof(char), sort);
    print(arr, size);
}
int sort(const void* e1, const void* e2)
{
   return strcmp((char*)e1, (char*)e2);//升序
}
void print(char* arr, int size)
{
    for (int i = 0; i < size-1; i++)
    {
        cout << arr[i] << endl;
    
    }
}
//3.排列结构体数组
#include<iostream>
using namespace std;
int sort(const void*, const void*);
void print(struct student* arr, int size);
struct student
{
    char name[10];
    int number;
    int math;
};
int main()
{
    struct student stu[3] =
    { {"wu",2154214,97},{"li",2154215,85},{"zhang",2154216,100} };
    int size = sizeof(stu) / sizeof(struct student);
    int width = sizeof(struct student);
    qsort(&stu, size, width, sort);
    print(stu, size);
}
int sort(const void* e1, const void* e2)
{
    //依照math成绩排列
    return ((struct student*)e1)->math-((struct student*)e2)->math;
}
void print(struct student* arr, int size)
{
    for (int i = 0; i < size; i++)
    {
        cout <<arr->name<< " " << arr->number << " " << arr->math << endl;
       arr++;
    }
}
二.编辑实现qsort程序!!!
#include<iostream>
using namespace std;
void qsort2(void*arr, int size, int width, int(*pt)(const void*, const void*));
int sort(const void*, const void*);
void print(int arr[], int size);
int main()
{
    //以整型数组检验
    int arr[10] = { 1,2,5,4,78,45,46,2,2,0 };
    int size = sizeof(arr) / sizeof(int);
    qsort2(arr, size, sizeof(int), sort);
    print(arr, size);
    return 0;
}
void qsort2(void* arr, int size, int width, int(*pt)(const void*, const void*))
{
    void swap(char*, char*, int);
    int i, j;
    for (i = 0; i < size-1; i++)
    {
     for(j=0;j<size-i-1;j++)
         if ((*pt)((char*)arr+j*width,(char*)arr+(j+1)*width)>0)
         {
             //交换
             swap((char*)arr + j * width, (char*)arr + (j + 1) * width, width);

         }
   }
}
void swap(char* t1, char* t2, int width)
{
    //一个字节一个交换
    for (int i = 0; i < width; i++)
    {
        char pt;
        pt = *t2;
        *t2= *t1;
        *t1 = pt;
        t1++;
        t2++;
    }
}
int sort(const void* e1,const void* e2)
{
    return *(int*)e1 - *(int*)e2;
}
void print(int arr[], int size)
{
    for (int i = 0; i < size; i++)
    {
        cout << arr[i] << endl;
    }
 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值