首页 > 其他分享 >用冒泡排序模拟qsort的实现

用冒泡排序模拟qsort的实现

时间:2023-03-12 14:03:18浏览次数:31  
标签:arr int void qsort 冒泡排序 arr2 arr1 sizeof 模拟

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
//交换
void swap(char* arr1, char* arr2, int width) {
int i = 0;
for (i = 0; i < width; i++) {
char arr = *arr1;
*arr1 = *arr2;
*arr2 = arr;
arr1++;
arr2++;
}
}
//bubble_sort函数的主体
void bubble_sort(void* arr, int sz, int width, int(*cmp)(void*e1, void*e2)) {
int i = 0;
for (i = 0; i < sz - 1; i++) {//趟数
int j = 0;
for (j = 0; j < sz - 1 - i; j++) {//每趟比较次数
//比较方式
if (cmp((char*)arr + j * width, (char*)arr + (j + 1) * width) > 0) {
swap((char*)arr + j * width, (char*)arr + (j + 1) * width,width);//交换
}
}
}
}
//结构体
struct stu {
char name[20];
int age;
};
//整型比较方式
int cmp_int(const void* pa, const void* pb) {
return (*(int*)pa - *(int*)pb);
}
//浮点型比较方式
int cmp_float(const void* pa, const void* pb) {
return (*(float*)pa - *(float*)pb);
}
//结构体比较方式--年龄
int cmp_con(const void* pa, const void* pb) {
return (((struct stu*)pa)->age - ((struct stu*)pb)->age);
}
//结构体比较方式--名称
int cmp_coname(const void* pa, const void* pb) {
return (strcmp(((struct stu*)pa)->name, ((struct stu*)pb)->name));
}
//整型打印
void print1(int arr[], int sz) {
int i = 0;
for (i = 0; i < sz; i++) {
printf("%d ", *(arr + i));
}
printf("\n");
}
//浮点型打印
void print2(float arr[], int sz) {
int i = 0;
for (i = 0; i < sz; i++) {
printf("%f ", arr[i]);
}
printf("\n");
}
//结构体打印
void print3(struct stu* arr, int sz) {
int i = 0;
for (i = 0; i < sz; i++) {
printf("%s ", (arr + i)->name);
}
printf("\n");
}
int main() {
int i = 0;
//整型
int arr1[] = { 9,8,7,6,4,5,1,2,3 };
int sz1 = sizeof(arr1) / sizeof(arr1[0]);
//浮点型
float arr2[] = { 9.0,8.0,7.0,6.0,5.0 };
int sz2 = sizeof(arr2) / sizeof(arr2[0]);
//结构体
struct stu arr3[] = { {"liming",20},{"lishui",25},{"zhangneng",15} };
int sz3 = sizeof(arr3) / sizeof(arr3[0]);
//整型qsort的使用
bubble_sort(arr1, sz1, sizeof(arr1[0]), cmp_int);
print1(arr1, sz1);
//浮点型qsort的使用
bubble_sort(arr2, sz2, sizeof(arr2[0]), cmp_float);
print2(arr2, sz2);
//结构体qsort的使用
bubble_sort(arr3, sz3, sizeof(arr3[0]), cmp_con);//年龄的比较
print3(arr3, sz3);

bubble_sort(arr3, sz3, sizeof(arr3[0]), cmp_coname);//名字的比较
print3(arr3, sz3);


return 0;
}

标签:arr,int,void,qsort,冒泡排序,arr2,arr1,sizeof,模拟
From: https://blog.51cto.com/u_13606048/6115778

相关文章

  • qsort的使用方式示例
    (数组首元素地址,数组元素个数,数组中每个元素的大小,函数指针-比较两个元素所用函数的地址)#include<stdio.h>#include<stdlib.h>#include<string.h>//结构体structstu{char......
  • Android 控件模拟点击和事件转移
    直接上代码 想看的看一下吧 主要是每次用到都忘记这个方法名... 记录一下子//焦点转移mContentTv.setOnClickListener(newView.OnClickListener(){......
  • 2023/3/8 && 2023/3/11 模拟总结
    开摆,嘿嘿,开摆!2023/3/8IOI赛制/6道题/部分文件io集训期间的第一次模拟,看到是IOI赛制感觉好拿分,于是就挺放松的。开考之后看到T1,胡了一个二维前缀和暴力做法,爽拿3......
  • 冒泡排序
    原理第一个元素如果大于第二个元素比较,则他们位置调换。假设有6个元素,需要经过6*6=36次循环。 代码/***升序**@paramnumArr*@ret......
  • 冰雹数(模拟数的运算)
    题目描述任意给定一个正整数N,$$如果是偶数,执行:N/2如果是奇数,执行:N\times3+1$$生成的新的数字再执行同样的动作,循环往复。通过观察发现,这个数字会一会儿上......
  • 数组模拟链表
    单链表数组模拟链表比动态链表效率更高。\(head\)作为指向头结点的指针,\(idx\)作为当前结点索引,每次执行完操作都要idx++;数组\(e[]\)用来保存当前结点的值,\(ne[......
  • 0310 模拟赛记录
    0310模拟赛记录problemsetlink。\(\text{div1}100+90+20=210\)。题解1A/2B-snow\(\text{difficulty}=2.5,3\)。\(\text{tags}=线段树\)。实际上倒数没有意义......
  • 字符编码梳理,celery 执行异步任务,延迟任务,定时任务, django中使用celery,模拟秒杀功能
    字符编码梳理,celery执行异步任务,延迟任务,定时任务,django中使用celery,模拟秒杀功能实例,轮播图接口加缓存,双写一致性,首页轮播图定时更新,课程前端页面字符编码梳理字符编......
  • 模拟队列
        重点:队列是有队头指针hh和队尾指针tt,判断空的条件是如果hh>=tt,队列就为空。栈只能从一个入口出入,栈底永远在0位置(这个位置不存元素)。但是队列是从队尾tail......
  • asp.net core 3.1 模拟数据库,假数据步骤
         1.Model usingSystem;usingSystem.Collections.Generic;usingSystem.Linq;usingSystem.Threading.Tasks;namespaceWebgentle.BookStore.......