实现快速排序算法的关键在于先在数组中选择一个数字,接下来把数组中的数字分为两部分,比选择的数字小的数字移到数组的左边,比选择的数字大的数字移到数组的右边。

这个函数可以如下实现:

int Partition(int data[], int length, int start, int end)
{
if(data == NULL || length <= 0 || start < 0 || end >= length)
throw new std::exception("Invalid Parameters"); int index = RandomInRange(start, end);
swap(&data[index], &data[end]); int small = start - 1;
for(index = start; index < end; ++index)
{
if(data[index] < data[end])
{
++small;
if(small != index)
swap(&data[index], &data[small]);
}
} ++small;
swap(&data[small], &data[end]); return small;
}

函数RandomInRange用来生成一个在start和end之间的随机数,函数swap的作用是用来交换两个数字。

如:输入n个整数,找出其中最小的k个数。例如输入4,5,1,6,2,7,3,8这8个数字,则最小的4个数字是1,2,3,4.

void GetLeastNumbers(int *input, int n, int *output, int k)
{
if(input == NULL || output == NULL || k > n || n <= 0 || k <= 0)
return; int start = 0;
int end = n - 1;
int index = Partition(input, n, start, end);
while(index != k - 1)
{
if(index > k - 1)
{
end = index - 1;
index = Partition(input, n, start, end);
}
else
{
start = index + 1;
index = Partition(input, n, start, end);
}
} for(int i = 0; i < k; ++i)
output[i] = input[i];
}

采用这种思路是有限制的。因为会修改输入的数组,函数Partition会调整数组中数字的顺序。

最新文章

  1. $(document).ready() 与window.onload的区别
  2. 如何修复VUM在客户端启用之后报数据库连接失败的问题
  3. Windows 10 IoT Serials 1 - 针对Minnow Board MAX的Windows 10 IoT开发环境搭建
  4. java分享第九天-01(抽象类)
  5. [安卓]windows下如何安装Android源码
  6. Spring实战2:装配bean—依赖注入的本质
  7. 你真的了解try{ return }finally{}中的return?
  8. oracle 11g impdp时 报ORA-12899(转)
  9. 它们的定义TextView使之具有跑马灯的效果
  10. Apache 与tomcat区别
  11. vim&amp;vi在编辑的时候突然卡死,不接收输入问题的解决
  12. Python开发【第三篇】基本数据类型
  13. antd Select进阶功能 动态更新、函数防抖
  14. C# 微信公众号开发--准备工作
  15. 【Redis】安装 Redis接口时异常 ,系统ruby版本过低
  16. ubuntu14.04 下出现 libmysqlclient.so.20 找不到问题
  17. codeM编程大赛E题 (暴力+字符串匹配(kmp))
  18. 一个页面从输入 URL 到页面加载显示完成,这个过程中都发生了什么?
  19. Node.js之exports与module.exports
  20. 横竖两个数字塔的效果BAT批处理怎么写?

热门文章

  1. windows 版的julia repl 启动时间已经大大优化!
  2. JS 信息提示弹框封装
  3. swift objective-及c语言 混编
  4. VMware安装虚拟系统问题
  5. Linux filesystem detection
  6. iOS 剪贴板基本知识
  7. UWP/Win10新特性系列—App Service
  8. 黑马程序员:Java编程_多线程
  9. zTree简单使用和代码结构
  10. IOS7 ~ Xcode5 制作 framework