插入排序-一函数实现升降序的两种方式
方式一:传整数参数判断升降排序
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)); //降序
插入排序-一函数实现升降序的两种方式相关推荐
- 二级指针在子函数中申请内存的两种方式
二级指针:在主函数中申明变量,在子函数中分配内存,有两种方式返回二级指针.在这个过程只有深刻理解了C的函数调用模型,以及指针的内存模型,才能够掌握好. #pragma once #include &l ...
- python列表list元素降序排列两种方法
python列表list元素降序排列的两种方法 sort()方法 python列表内置了一个sort()方法,可以用于为元素列表进行排序,当将默认参数reverse设置为True,sort()方法将为 ...
- DLL中导出函数的声明有两种方式
本文引用自:VC编程时DLL中导出函数的声明有两种方式 一种方式是:在函数声明中加上__declspec(dllexport): 另外一种方式是:采用模块定义(.def)文件声明,(.def)文件为链 ...
- EntityFramework Core 2.0自定义标量函数两种方式
前言 上一节我们讲完原始查询如何防止SQL注入问题同时并提供了几种方式.本节我们继续来讲讲EF Core 2.0中的新特性自定义标量函数. 自定义标量函数两种方式 在EF Core 2.0中我们可以将 ...
- [js] axios为什么可以使用对象和函数两种方式调用?是如何实现的?
[js] axios为什么可以使用对象和函数两种方式调用?是如何实现的? axios 源码 初始化 看源码第一步,先看package.json.一般都会申明 main 主入口文件. // packag ...
- java native函数库_Java 层调用 Native 层函数的两种方式
概述 Java 层如何调用Native层函数,大家都应该知道使用JNI(Java 本地接口). 通过在java层声明native方法,然后遵守JNI规范命名Native函数,即可建立Java层nati ...
- python循环展示大写字母_python调用大写函数python中字典的循环遍历的两种方式
开发中经常会用到对于字典.列表等数据的循环遍历,但是python中对于字典的遍历对于很多初学者来讲非常陌生,今天就来讲一下python中字典的循环遍历的两种方式. 注意: python2和python ...
- 在oracle 中编写一个程序,用VC 开 发 基 于ORACLE 数 据 库 应 用 程 序 的 两 种 方 法...
用VC 开 发 基 于ORACLE 数 据 库 应 用 程 序 的 两 种 方 法 北 京 航 空 航 天 大 学 计 算 机 科 学 与 工 程 系 黎 杰 麦 中 凡 ---- 1. 引 言 -- ...
- Google Earth Engine (GEE)——利用两种方式进行EVI指数(含函数的两种定义方式)
如何快速使用波段进行指数的计算,我们这里利用两种方式进行EVI指数计算,一种是利用expression的方式进行分析,虽然两种方法的结算结果都一样,但是代码有多有少,大家可以参考使用,但是两者的作用对 ...
最新文章
- RocketMq是什么
- java集合框架LinkedList类的方法理解
- 前仓后仓是什么意思_高支纱到底是什么?镰仓衬衫面料全解析
- bzoj 2179 FFT快速傅立叶 FFT
- Tensorflow学习——Keras
- QOS之NBAR 下
- 简单java程序_简单的Java程序
- 机器学习笔记(六)数据分类
- BZOJ 1901 洛谷 P2617 ZOJ 2112 Dynamic Rankings
- OS - 计算机组成原理及CPU主频揭秘
- 工具安装----Clang-format的基本使用
- 影视剪辑,PR剪辑软件两个转场教程
- 计算机EXE文件改参数,笔记本专用xp系统修改注册表参数导致exe格式文件无法打开怎么办...
- 计算机开机后桌面放大,开机后桌面图标变大 桌面图标变大了怎么处理?
- 计算机系学霸情书,大学生“学霸情书”火了,各专业表达浪漫!网友:教科书级别!...
- linux下qt浏览word文件内容,Qt获取office文件内容
- 搭建spring-boot+vue前后端分离框架并实现登录功能
- PostgreSQL 10 基于日志的备份与还原
- ServiceNow - 圣地亚哥实例 表单修改用户密码(Change user password on Sys_user Form in San Diego)
- 用php输出一百以内的素数,php输出1000以内质数(素数)示例