冒泡、选择、插入、快排;C/C++实现
来源:互联网 发布:fopen提高权限 linux 编辑:程序博客网 时间:2024/06/05 04:13
冒泡、选择、插入、快排 排序算法
- 冒泡排序
- 选择排序
- 插入排序
- 快速排序
冒泡排序
排序结果放前面;如下图:
代码:
int maopao(int arr[], int len){ if(NULL == arr || len < 2) { return -1; } for(int i = 0; i < len - 1; ++i) { for(int j = i+1; j < len; ++j) { if(arr[i] > arr[j]) { int tmp = arr[i]; arr[i] = arr[j]; arr[j] = tmp; } } } return 0;}int main(){ int arr[] = {3,5,1,4,2}; int len = sizeof(arr)/sizeof(arr[0]); maopao(arr, len); for(int i = 0; i < len; ++i) { printf("%d ", arr[i]); } return 0;}
测试结果:
排序结果放后面;如下图:
代码:
int maopao(int arr[], int len){ if(NULL == arr || len < 2) { return -1; } for(int j = 0; j < len - 1; ++j) { for(int i = 0; i < len - 1 - j; ++i) { if(arr[i] > arr[i+1]) { int tmp = arr[i]; arr[i] = arr[i+1]; arr[i+1] = tmp; } } } return 0;}int main(){ int arr[] = {3,5,1,4,2}; int len = sizeof(arr)/sizeof(arr[0]); maopao(arr, len); for(int i = 0; i < len; ++i) { printf("%d ", arr[i]); } return 0;}
- 测试结果:
选择排序
- 内循环找到最小值下标;根据判断最小值下标确定是否需要交换当前最小值;如下图:
- 代码:
int xuanzhe(int arr[], int len){ if(NULL == arr || len < 2) { return -1; } for(int j = 0; j < len - 1; ++j) { int min = j; for(int i = j + 1; i < len; ++i) { if(arr[min] > arr[i]) //找到后面元素最小值的下标 { min = i; } } if(j != min) //说明需要交换 { int tmp = arr[j]; arr[j] = arr[min]; arr[min] = tmp; } } return 0;}
- 测试结果:
插入排序
从后面取一个数字和前面有序序列进行比较,找到插入点插入到前面有序序列中;如下图:
代码:
int charu(int arr[], int len){ if(NULL == arr || len < 2) { return -1; } int j = 0; for(int i = 1; i < len; ++i) { int tmp = arr[i]; //缓存当前要和前面有序序列比较的值 for( j = i - 1; j >=0 && tmp < arr[j]; --j) { arr[j+1] = arr[j]; //移动数据,寻找插入点 } arr[j+1] = tmp; //因为上面循环退出时--j;所以插入点位置为j+1 } return 0;}
- 测试结果:
快速排序
有点二分查找的思想;选取一个基数BaseNum(作为比较值),一般选取数组中的首元素作为基数;定义左右两个数组下标值,left、right;先从right往前依次比较找到比基数小的值停下来,再从left往后依次比较找到比基数大的值(一个从后往前遍历,一个从前往后遍历);如果left != right (没有重合)说明需要交换当前左、右下标的元素值;否则需将当前基数值BaseNum和重合点下标的元素进行交换。然后以当前重合点为分割线,分成两个序列;分别对两个序列重复以上步骤;最终得到排序结果。(这里以升序为例)如下图:
代码:
int kuaisu(int arr[], int left, int right){ //传参合法性判断 if(NULL == arr || left < 0 || right < 0) { return -1; } if(left > right) //递归退出条件 { return 0; } int i = left; int j = right; int BaseNum = arr[left]; //基数 while(i != j) { while(arr[j] >= BaseNum && i < j) //先从右边找比BaseNum小的元素 --j; while(arr[i] <= BaseNum && i < j) //再从左边找比BaseNum大的元素 ++i; //交换;把比基数BaseNum大元素都放在右边,比基数小的放在左边 int tmp = arr[i]; arr[i] = arr[j]; arr[j] = tmp; } //将基数值归位 arr[left] = arr[i]; arr[i] = BaseNum; //递归分别对左边序列和右边序列进行排序 kuaisu(arr, left, i-1); kuaisu(arr, i+1, right); return 0;}
- 测试结果:
如有问题,欢迎提出建议和修改。
阅读全文
0 0
- 冒泡、选择、插入、快排;C/C++实现
- C语言.冒泡选择及快排
- C++DLL导出类(快排,堆排,插入排序,选择排序,冒泡排序)
- C语言排序(冒泡,选择,快排,插排)
- 冒泡,选择,插入,归并,快排
- 冒泡、鸡尾酒、选择、插入、快排、希尔
- 各类排序C++实现(冒泡,选择,插入,快排,归并,堆排)
- C++实现各种基础排序(冒泡、选择、快排、插入、堆排、希尔、归并)
- 冒泡 选择 插入 归并 快排 堆排 希尔
- 排序(冒泡,选择,插入,快排,堆排)
- 排序及选择算法的java实现(一)选择、冒泡、插入、希尔、归并、快排
- 选择,冒泡,快排
- 排序 实现-插入-选择-快排
- 几种排序的java实现:选择、插入、冒泡、快排
- java实现常见的排序(冒泡、插入、选择、快排)
- Java实现的排序算法及比较 [冒泡,选择,插入,归并,希尔,快排]
- 常见排序算法C++实现(冒泡,直接插入,希尔,堆,归并,简单选择,快排)
- 排序(快排,冒泡,堆排序,插入排序,归并排序,选择排序)算法Java实现
- FreeIPA LDAP HA安装
- #HDU 2444 The Accomodation of Students
- GCC 编译详解
- 非极大值抑制——NMS实例
- 下午Libjdx的理解性学习(生如K线博客)
- 冒泡、选择、插入、快排;C/C++实现
- 我的Laravel学习之路之Route::resource和Form-Model-Binding,
- android HAL 分析
- 修改linux swap空间的swappiness,降低对硬盘的缓存
- 用易企拍app拍摄企业宣传片的简易使用教程
- idea导入maven项目和普通Web项目,并且使用tomcat部署
- vue踩坑系列——backgroundImage路径问题
- HTK在Windows7.32位系统下的安装及注意事项
- Make输出重定向