方式一:传整数参数判断升降排序

void insertion_sort(int *sort_arr, int start, int end, char sort_choice){int i = 0, j = 0, temp = 0, k = 0;if(1 == sort_choice){//大数在前for(j = 1; j<= end; j++){temp = sort_arr[j];for(i = j - 1; i >= 0; i--){if(sort_arr[i] < temp){sort_arr[i + 1] = sort_arr[i];}else{break;  //j左边的始终是排序好的}}sort_arr[i + 1] = temp; //i 总是在中断处的前面一位//  for(k = 0; k < 10; k++){//      printf("%d\t",sort_arr[k]);//  }//  printf("\n\r",sort_arr[k]);}}else if(0 == sort_choice)//小数在前{for(j = 1; j<= end; j++){temp = sort_arr[j];for(i = j - 1; i >= 0; i--){if(sort_arr[i] > temp){sort_arr[i + 1] = sort_arr[i];}else{break;}}sort_arr[i + 1] = temp; //i 总是在中断处的前面一位//  for(k = 0; k < 10; k++){//      printf("%d\t",sort_arr[k]);//  }//  printf("\n\r",sort_arr[k]);}        }
}

注:升降判断不放在循环内,减少判断次数

方式二:函数参数使用回调函数

插入排序主体

void insertion_sort(int *sort_arr, int start, int end, char(*sort_select)(int, int))
{int i = 0, j = 0, temp = 0, k = 0;for(j = 1; j<= end; j++){temp = sort_arr[j];for(i = j - 1; i >= 0; i--){if(sort_select(sort_arr[i], temp)){sort_arr[i + 1] = sort_arr[i];}else{break;}}sort_arr[i + 1] = temp; //i 总是在中断处的前面一位//  for(k = 0; k < 10; k++){//      printf("%d\t",sort_arr[k]);//  }//  printf("\n\r",sort_arr[k]);}
}

插入排序判断体,分为两部分,一个升序一个降序

char insertion_sort_Increase(int a, int b){return a>b ? 1:0;
}
char insertion_sort_Deincrease(int a, int b){return a>b ? 0:1;
}

调用方法:

insertion_sort_2(/*排序数组*/,/*起始位*/,/*结束位*/,\
insertion_sort_2_Deincrease(或者insertion_sort_2_Increase));    //降序

插入排序-一函数实现升降序的两种方式相关推荐

  1. 二级指针在子函数中申请内存的两种方式

    二级指针:在主函数中申明变量,在子函数中分配内存,有两种方式返回二级指针.在这个过程只有深刻理解了C的函数调用模型,以及指针的内存模型,才能够掌握好. #pragma once #include &l ...

  2. python列表list元素降序排列两种方法

    python列表list元素降序排列的两种方法 sort()方法 python列表内置了一个sort()方法,可以用于为元素列表进行排序,当将默认参数reverse设置为True,sort()方法将为 ...

  3. DLL中导出函数的声明有两种方式

    本文引用自:VC编程时DLL中导出函数的声明有两种方式 一种方式是:在函数声明中加上__declspec(dllexport): 另外一种方式是:采用模块定义(.def)文件声明,(.def)文件为链 ...

  4. EntityFramework Core 2.0自定义标量函数两种方式

    前言 上一节我们讲完原始查询如何防止SQL注入问题同时并提供了几种方式.本节我们继续来讲讲EF Core 2.0中的新特性自定义标量函数. 自定义标量函数两种方式 在EF Core 2.0中我们可以将 ...

  5. [js] axios为什么可以使用对象和函数两种方式调用?是如何实现的?

    [js] axios为什么可以使用对象和函数两种方式调用?是如何实现的? axios 源码 初始化 看源码第一步,先看package.json.一般都会申明 main 主入口文件. // packag ...

  6. java native函数库_Java 层调用 Native 层函数的两种方式

    概述 Java 层如何调用Native层函数,大家都应该知道使用JNI(Java 本地接口). 通过在java层声明native方法,然后遵守JNI规范命名Native函数,即可建立Java层nati ...

  7. python循环展示大写字母_python调用大写函数python中字典的循环遍历的两种方式

    开发中经常会用到对于字典.列表等数据的循环遍历,但是python中对于字典的遍历对于很多初学者来讲非常陌生,今天就来讲一下python中字典的循环遍历的两种方式. 注意: python2和python ...

  8. 在oracle 中编写一个程序,用VC 开 发 基 于ORACLE 数 据 库 应 用 程 序 的 两 种 方 法...

    用VC 开 发 基 于ORACLE 数 据 库 应 用 程 序 的 两 种 方 法 北 京 航 空 航 天 大 学 计 算 机 科 学 与 工 程 系 黎 杰 麦 中 凡 ---- 1. 引 言 -- ...

  9. Google Earth Engine (GEE)——利用两种方式进行EVI指数(含函数的两种定义方式)

    如何快速使用波段进行指数的计算,我们这里利用两种方式进行EVI指数计算,一种是利用expression的方式进行分析,虽然两种方法的结算结果都一样,但是代码有多有少,大家可以参考使用,但是两者的作用对 ...

最新文章

  1. RocketMq是什么
  2. java集合框架LinkedList类的方法理解
  3. 前仓后仓是什么意思_高支纱到底是什么?镰仓衬衫面料全解析
  4. bzoj 2179 FFT快速傅立叶 FFT
  5. Tensorflow学习——Keras
  6. QOS之NBAR 下
  7. 简单java程序_简单的Java程序
  8. 机器学习笔记(六)数据分类
  9. BZOJ 1901 洛谷 P2617 ZOJ 2112 Dynamic Rankings
  10. OS - 计算机组成原理及CPU主频揭秘
  11. 工具安装----Clang-format的基本使用
  12. 影视剪辑,PR剪辑软件两个转场教程
  13. 计算机EXE文件改参数,笔记本专用xp系统修改注册表参数导致exe格式文件无法打开怎么办...
  14. 计算机开机后桌面放大,开机后桌面图标变大 桌面图标变大了怎么处理?
  15. 计算机系学霸情书,大学生“学霸情书”火了,各专业表达浪漫!网友:教科书级别!...
  16. linux下qt浏览word文件内容,Qt获取office文件内容
  17. 搭建spring-boot+vue前后端分离框架并实现登录功能
  18. PostgreSQL 10 基于日志的备份与还原
  19. ServiceNow - 圣地亚哥实例 表单修改用户密码(Change user password on Sys_user Form in San Diego)
  20. 用php输出一百以内的素数,php输出1000以内质数(素数)示例

热门文章

  1. 国产数据库替换oracle,国产数据库能否替换oracle数据库?
  2. 尝试梳理下ARM处理器的发展历史
  3. JavaScript——JavaScript数据类型转换
  4. 第一章 关于交易的思考
  5. IIS服务器下载apk文件
  6. MySQL学习笔记-约束以及修改数据表
  7. 数据结构与算法基础(青岛大学-王卓)(3)
  8. 使用爬虫+Flask获取世界国旗数据和孩子一起学习
  9. 安全防护工具之:Clair
  10. HHKB 使用一月体验