切割排序 代码(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)相关推荐

  1. 编程算法 - 将排序数组按绝对值大小排序 代码(java)

    一个含有多个元素的数组,有多种排序方式.它可以升序排列,可以降序排列,也可以像我们以前章节说过的,以波浪形方式排序,现在我们要看到的一种是绝对值排序.对于数组A,绝对值排序满足以下条件:|A[i]| ...

  2. 编程算法 - 字典分词 代码(C)

    字典分词 代码(C) 本文地址: http://blog.csdn.net/caroline_wendy 给定字典, 给定一句话, 进行分词. 使用深度遍历(DFS)的方法. 使用一个參数string ...

  3. 动图图解C语言选择排序算法,含代码分析

    C语言文章更新目录 C语言学习资源汇总,史上最全面总结,没有之一 C/C++学习资源(百度云盘链接) 计算机二级资料(过级专用) C语言学习路线(从入门到实战) 编写C语言程序的7个步骤和编程机制 C ...

  4. 八大排序算法总结Java代码实现(建议收藏后食用)

    目录 排序算法介绍 相关术语 排序的稳定性 排序分类 内排序与外排序 算法时间复杂度 度量一个程序(算法)执行时间的两种方法 时间频度 忽略常数项 忽略低次项 忽略系数 时间复杂度 常数阶O(1) 对 ...

  5. DayDayUp之Job:牛客网—算法工程师—剑指offer之66道在线编程(解决思路及其代码)——1~20

    DayDayUp之Job:牛客网-算法工程师-剑指offer之66道在线编程(解决思路及其代码)--01~20 目录 剑指offer--66道在线编程--01~20 1.二维数组中的查找某个targe ...

  6. DayDayUp之Job:牛客网—算法工程师—剑指offer之66道在线编程(解决思路及其代码)——41~66

    DayDayUp之Job:牛客网-算法工程师-剑指offer之66道在线编程(解决思路及其代码)--41~66 目录 剑指offer之66道在线编程--41~66 42.和为s的两个数字 43.左旋转 ...

  7. DayDayUp之Job:牛客网—算法工程师—剑指offer之66道在线编程(解决思路及其代码)——21~40

    DayDayUp之Job:牛客网-算法工程师-剑指offer之66道在线编程(解决思路及其代码)--21~41 目录 剑指offer之66道在线编程--21~41 21.栈的压入.弹出序列 22.从上 ...

  8. python 代码排布_python实现经典排序算法的示例代码

    以下排序算法最终结果都默认为升序排列,实现简单,没有考虑特殊情况,实现仅表达了算法的基本思想. 冒泡排序 内层循环中相邻的元素被依次比较,内层循环第一次结束后会将最大的元素移到序列最右边,第二次结束后 ...

  9. 十大经典排序算法(附代码、动画及改进方案)

    前言说明 十大排序算法可以说是每个程序员最早接触的也是最重要的算法,这一块必须要非常熟练的掌握,应该要理解每种排序的思想,对各个排序的性能的了解也是基础且重要的.为了方便自己和大家学习,决定整合成一篇 ...

最新文章

  1. 迷惑行为赏析:把 jpg 图片加密后卖了 247 万
  2. Android系统如何管理自己内存的?
  3. pose estimation papers and datasets
  4. scratch 素材_scratch书籍免费领
  5. linux下安装nginx的采坑记录
  6. 洛谷——P1424 小鱼的航程(改进版)
  7. nginx 配置文件详解 深入理解nginx配置文件
  8. 系统学习机器学习之神经网络(七) --CPN
  9. Java RMI之介绍
  10. 12. Magento 后台top栏开发
  11. Guava学习笔记(五):简化异常处理的Throwables类
  12. php请求图片,PHP - 发送GET请求并获取图片作为回报
  13. jquery鼠标右键事件
  14. Linux(ubuntu)系统键盘指法打字练习软件汇总
  15. 辐射光电流测试软件,资深工程师告诉你如何使用示波器测试EMI辐射干扰
  16. 【二维码】新浪开放平台和腾讯开放平台试水
  17. Excel制作图表(二)--- 燃尽图
  18. 平台+插件源代码最新地址
  19. 知识表示的方法(3)——状态空间表示法
  20. Unity 之 ShaderGraph Utility节点解析汇总

热门文章

  1. Rocketmq集群架构图
  2. php获取flash上传视频文件大小,php解析flash文件(.swf文件)获取其长度和宽度
  3. 302状态码_http状态码是什么?301 302 404的SEO应用场景
  4. Linux文件编程(2)
  5. 朱建辉php,朱建辉/laravel-bjyblog
  6. 设计模式 之 抽象工厂模式
  7. 培训师 每小时多少钱_每个产品设计师需要了解的品牌知识
  8. 静态原型设计 加载中_见解1:原型设计有助于填补静态设计留下的空白。
  9. 七种主流设计风格_您是哪种设计风格?
  10. 跨库一致性_设计跨平台的一致性