编程算法 - 切割排序 代码(C)
切割排序 代码(C)
本文地址: http://blog.csdn.net/caroline_wendy
排序切割, 把一个数组分为, 大于k\小于k\等于k的三个部分.
能够使用高速排序的Partition函数, 进行处理, 把大于k的放在左边, 小于k的放在右边.
使用一个变量记录中间的位置, 则时间复杂度为O(3n/2).
代码:
/** main.cpp** Created on: 2014.9.18* Author: Spike*//*eclipse cdt, gcc 4.8.1*/#include <iostream>
#include <list>
#include <queue>
#include <string.h>
#include <stdlib.h>using namespace std;int RandomInRange(int min, int max) {return rand()%(max-min+1) + min;
}void Swap(int* num1, int* num2) {int tmp = *num1;*num1 = *num2;*num2 = tmp;
}int PartitionK (int data[], int length, int k)
{if (data == NULL || length <= 0)return -1;int small = -1;int index = 0;for (index=0; index<length; ++index) {if (data[index] < k) {small++;if (small != index)Swap(&data[small], &data[index]);}}int pos = ++small; //记录位置small = length;index = 0;for (index = length-1; index>=pos; index--) {if (data[index] > k) {small--;if (small != index)Swap(&data[small], &data[index]);}}return --small;
}int main (void)
{int data[] = {1, 3, 2, 5, 2, 0, 5, 2, -1, 0, 4};int length = sizeof(data)/sizeof(data[0]);PartitionK(data, length, 2);for (int i=0; i<length; ++i) {cout << data[i] << " ";}cout << endl;return 0;
}
输出:
1 0 -1 0 2 2 2 3 5 5 4
版权声明:本文博客原创文章,博客,未经同意,不得转载。
转载于:https://www.cnblogs.com/zfyouxi/p/4687531.html
编程算法 - 切割排序 代码(C)相关推荐
- 编程算法 - 将排序数组按绝对值大小排序 代码(java)
一个含有多个元素的数组,有多种排序方式.它可以升序排列,可以降序排列,也可以像我们以前章节说过的,以波浪形方式排序,现在我们要看到的一种是绝对值排序.对于数组A,绝对值排序满足以下条件:|A[i]| ...
- 编程算法 - 字典分词 代码(C)
字典分词 代码(C) 本文地址: http://blog.csdn.net/caroline_wendy 给定字典, 给定一句话, 进行分词. 使用深度遍历(DFS)的方法. 使用一个參数string ...
- 动图图解C语言选择排序算法,含代码分析
C语言文章更新目录 C语言学习资源汇总,史上最全面总结,没有之一 C/C++学习资源(百度云盘链接) 计算机二级资料(过级专用) C语言学习路线(从入门到实战) 编写C语言程序的7个步骤和编程机制 C ...
- 八大排序算法总结Java代码实现(建议收藏后食用)
目录 排序算法介绍 相关术语 排序的稳定性 排序分类 内排序与外排序 算法时间复杂度 度量一个程序(算法)执行时间的两种方法 时间频度 忽略常数项 忽略低次项 忽略系数 时间复杂度 常数阶O(1) 对 ...
- DayDayUp之Job:牛客网—算法工程师—剑指offer之66道在线编程(解决思路及其代码)——1~20
DayDayUp之Job:牛客网-算法工程师-剑指offer之66道在线编程(解决思路及其代码)--01~20 目录 剑指offer--66道在线编程--01~20 1.二维数组中的查找某个targe ...
- DayDayUp之Job:牛客网—算法工程师—剑指offer之66道在线编程(解决思路及其代码)——41~66
DayDayUp之Job:牛客网-算法工程师-剑指offer之66道在线编程(解决思路及其代码)--41~66 目录 剑指offer之66道在线编程--41~66 42.和为s的两个数字 43.左旋转 ...
- DayDayUp之Job:牛客网—算法工程师—剑指offer之66道在线编程(解决思路及其代码)——21~40
DayDayUp之Job:牛客网-算法工程师-剑指offer之66道在线编程(解决思路及其代码)--21~41 目录 剑指offer之66道在线编程--21~41 21.栈的压入.弹出序列 22.从上 ...
- python 代码排布_python实现经典排序算法的示例代码
以下排序算法最终结果都默认为升序排列,实现简单,没有考虑特殊情况,实现仅表达了算法的基本思想. 冒泡排序 内层循环中相邻的元素被依次比较,内层循环第一次结束后会将最大的元素移到序列最右边,第二次结束后 ...
- 十大经典排序算法(附代码、动画及改进方案)
前言说明 十大排序算法可以说是每个程序员最早接触的也是最重要的算法,这一块必须要非常熟练的掌握,应该要理解每种排序的思想,对各个排序的性能的了解也是基础且重要的.为了方便自己和大家学习,决定整合成一篇 ...
最新文章
- 迷惑行为赏析:把 jpg 图片加密后卖了 247 万
- Android系统如何管理自己内存的?
- pose estimation papers and datasets
- scratch 素材_scratch书籍免费领
- linux下安装nginx的采坑记录
- 洛谷——P1424 小鱼的航程(改进版)
- nginx 配置文件详解 深入理解nginx配置文件
- 系统学习机器学习之神经网络(七) --CPN
- Java RMI之介绍
- 12. Magento 后台top栏开发
- Guava学习笔记(五):简化异常处理的Throwables类
- php请求图片,PHP - 发送GET请求并获取图片作为回报
- jquery鼠标右键事件
- Linux(ubuntu)系统键盘指法打字练习软件汇总
- 辐射光电流测试软件,资深工程师告诉你如何使用示波器测试EMI辐射干扰
- 【二维码】新浪开放平台和腾讯开放平台试水
- Excel制作图表(二)--- 燃尽图
- 平台+插件源代码最新地址
- 知识表示的方法(3)——状态空间表示法
- Unity 之 ShaderGraph Utility节点解析汇总
热门文章
- Rocketmq集群架构图
- php获取flash上传视频文件大小,php解析flash文件(.swf文件)获取其长度和宽度
- 302状态码_http状态码是什么?301 302 404的SEO应用场景
- Linux文件编程(2)
- 朱建辉php,朱建辉/laravel-bjyblog
- 设计模式 之 抽象工厂模式
- 培训师 每小时多少钱_每个产品设计师需要了解的品牌知识
- 静态原型设计 加载中_见解1:原型设计有助于填补静态设计留下的空白。
- 七种主流设计风格_您是哪种设计风格?
- 跨库一致性_设计跨平台的一致性