当前位置: 首页 > news >正文

回调函数qsort①冒泡排序数组

#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>

①使用普通方法及冒泡排序思想对已知数组进行升序排序

    //冒泡排序思想:
    //3,1,7,5,8,4,2,0,9,6 —— 1,3,7,5,8,4,2,0,9,6 —— 1,3,5,7,8,4,2,0,9,6 —— 1,3,5,7,4,8,2,0,9,6
        // —— 1,3,5,7,4,2,8,0,9,6 —— 1,3,5,7,4,2,0,8,9,6 —— 1,3,5,7,4,2,0,8,6,9
    //1,3,5,7,4,2,0,8,6,9 —— 1,3,5,4,7,2,0,8,6,9 —— 1,3,5,4,2,7,0,8,6,9 —— 1,3,5,4,2,0,7,8,6,9
        // —— 1,3,5,4,2,0,7,6,8,9
    //1,3,5,4,2,0,7,6,8,9 —— 1,3,4,5,2,0,7,6,8,9 —— 1,3,4,2,5,0,7,6,8,9 —— 1,3,4,2,0,5,7,6,8,9
        // —— 1,3,4,2,0,5,6,7,8,9
    //1,3,4,2,0,5,6,7,8,9 —— 1,3,2,4,0,5,6,7,8,9 —— 1,3,2,0,4,5,6,7,8,9
    //1,3,2,0,4,5,6,7,8,9 —— 1,2,3,0,4,5,6,7,8,9 —— 1,2,0,3,4,5,6,7,8,9
    //1,2,0,3,4,5,6,7,8,9 —— 1,0,2,3,4,5,6,7,8,9
    //1,0,2,3,4,5,6,7,8,9 —— 0,1,2,3,4,5,6,7,8,9

void bubble_sort(int* pa,int sz)
{
    int i = 0;
    int tmp = 0;
    for (i = 0; i < sz - 1; i++)
//10个数字,只需循环9次
    {
        int j = 0;
        for (j = 0; j < sz - i - 1; j++)
//每循环一次,就排好一个数字,所需排的数字就少一个
        {
            if (pa[j] > pa[j + 1])
            {
                tmp = pa[j];
                pa[j] = pa[j + 1];
                pa[j + 1] = tmp;
            }
        }
    }

    //for (i = 0; i < sz; i++)
    //{
    //    printf("%d ", pa[i]);
    //}

}
int main()
{
    int arr[] = { 3,1,7,5,8,4,2,0,9,6 };
    int sz = sizeof(arr) / sizeof(arr[0]);
    bubble_sort(arr, sz);
    for (int i = 0; i < sz; i++)
    {
        printf("%d ", arr[i]);
    }
    return 0;
}

void bubble_sort(int arr[10], int sz)
{
    int i = 0;
    int tmp = 0;
    for (i = 0; i < sz - 1; i++)
    {
        int j = 0;
        for (j = 0; j < sz - i - 1; j++)
        {
            if (arr[j] > arr[j + 1])
            {
                tmp = arr[j];
                arr[j] = arr[j + 1];
                arr[j + 1] = tmp;
            }
        }
    }

    //for (i = 0; i < sz; i++)
    //{
    //    printf("%d ", arr[i]);
    //}

}
int main()
{
    int arr[] = { 3,1,7,5,8,4,2,0,9,6 };
    int sz = sizeof(arr) / sizeof(arr[0]);
    bubble_sort(arr, sz);
    for (int i = 0; i < sz; i++)
    {
        printf("%d ", arr[i]);
    }
    return 0;
}


②使用qsort及回调函数对已知数组进行升序排序

//void qsort(void* base, size_t num, size_t size, int (*compar)(const void*, const void*))
//          待排数组起始位 数组元素个数 数组元素字节数              函数指针

C语言中的 qsort 函数是标准库函数,属于C标准库(C Standard Library)的一部分。
它定义在 <stdlib.h >  头文件中,用于对数组进行快速排序。

 关键点:
    1.库函数:qsort 是C标准库提供的函数,无需用户自行实现排序算法,直接调用即可。
    2.头文件:使用时需包含 <stdlib.h > 。
    3.功能:基于快速排序算法(具体实现可能因编译器优化而不同)对数组进行排序。
    4.灵活性:通过函数指针自定义比较逻辑,支持任意数据类型的排序。

函数原型:

void qsort(
    void* base,        
// 待排序数组的首地址
    size_t nmemb,       // 数组元素个数
    size_t size,        // 每个元素的大小(字节)
    int (*compar)(const void*, const void*) // 比较函数的指针
);

示例用法:

#include <stdio.h>
#include <stdlib.h>

// 比较函数:升序排列
int compare(const void* a, const void* b) {
    return (*(int*)a - *(int*)b);
}

int main() {
    int arr[] = { 5, 2, 8, 1, 3 };
    int n = sizeof(arr) / sizeof(arr[0]);

    qsort(arr, n, sizeof(int), compare);

    for (int i = 0; i < n; i++) {
        printf("%d ", arr[i]); // 输出:1 2 3 5 8
    }
    return 0;
}

注意事项:
    比较函数:必须返回整数,表示两个元素的相对顺序(负数、零、正数)。
    类型安全:需在比较函数内部正确转换 void* 指针到实际类型。
    性能:虽然名为“快速排序”,但具体实现可能结合其他优化策略。

qsort 是跨平台的标准库函数,适用于所有符合C标准的编译环境。

#include<stdlib.h>
int int_imp(const void* e1, const void* e2)
{
    return *(int*)e1 - *(int*)e2;
}
int main()
{
    int arr[] = { 3,1,7,5,8,4,2,0,9,6 };
    int sz = sizeof(arr) / sizeof(arr[0]);

    //qsort(arr, sizeof(arr)/sizeof(arr[0]), sizeof(int), int_imp);
    qsort(arr, sz, sizeof(int), int_imp);
    for (int i = 0; i < sz; i++)
    {
        printf("%d ", arr[i]);
    }
    return 0;
}

相关文章:

  • 如何在Futter开发中做性能优化?
  • 个人居家 Web移动端 局域网 远程控制电脑 工具 PC遥控器拿去玩吧
  • Leetcode 刷题笔记1 动态规划part10
  • app.config.globalProperties
  • 机器学习算法——聚类任务
  • Flink 中RocksDB 为什么将每个键和值的限制为 2^31 字节
  • DeepSeek-prompt指令-当DeepSeek答非所问,应该如何准确的表达我们的诉求?
  • Pytorch实现之BCGAN实现双生成器架构的人脸面部生成
  • 从零开始用AI开发游戏(二)代码实现
  • SolarWinds Web Help Desk漏洞曝光:攻击者可访问存储密码
  • 动态IP vs 静态IP:终极对比一览表
  • 使用LiteFlow实现阻塞审批工作流
  • 前端面试:React hooks 调用是可以写在 if 语句里面吗?
  • JavaScript性能优化实战指南
  • 软件工程概述、软件过程模型、逆向工程(高软45)
  • HTML5拼图游戏开发经验分享
  • Pycharm(五)序列的操作
  • 网络VLAN技术详解:原理、类型与实战配置
  • Elasticsearch Java High Level Client [7.17] 使用
  • K8S学习之基础二十八:k8s中的configMap
  • 淮安市车桥中学党总支书记王习元逝世,终年51岁
  • 时隔三年,俄乌直接谈判重启
  • 戛纳打破“疑罪从无”惯例,一法国男演员被拒之门外
  • 上海国际碳中和博览会下月举办,首次打造民营经济专区
  • 向猫学习禅修之后,你会发现将生活降格为劳作是多么愚蠢
  • 晋级四强!WTA1000罗马站:郑钦文2比0萨巴伦卡