博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
排序负数排在左边非负数排在右边
阅读量:6952 次
发布时间:2019-06-27

本文共 1163 字,大约阅读时间需要 3 分钟。

前言:把一堆整数负数排在左边非负数排在右边

思想:

从两端同时扫描待排序列,左边的关键字为负数的时候则扫描下一个关键字;直到第一个非负数,同理扫描右端的关键字;

把两端的关键字进行相应的交换的操作,直到左右扫描的索引碰头

代码:

1 /** 2  把负数放到左边非负数放到右边 3  4  @param R 待排数组 5  @param len 数组中关键字的个数 6  */ 7 void negative0Positive0(int R[],int len); 8 void negative0Positive0(int R[],int len){ 9     10     int i = 0;11     int j = len-1;12     int temp;13     14     for(;i
= 0) {23 --j;24 }25 26 R[i] = R[j];27 R[j] = temp;28 29 30 }31 32 }
View Code

测试内容:

1         int R[] = {
1,2,-2,3,4,-3,0};2 negative0Positive0(R, sizeof(R)/sizeof(int));3 for (int i = 0; i < sizeof(R)/sizeof(int); i ++) {4 printf("%d\t",R[i]);5 }
View Code

测试结果

-3 -2 2 3 4 1 0 Program ended with exit code: 0

思考:

上边的算法的时间复杂度为O(n),空间复杂度为O(1)

但是并不能保证原来的正负数的相对顺序保持不变。

如果是要求保证原来的相对顺序不变的情况下,在空间件复杂度为O(n)的情况下;

在创建一个数组来放置关键字,然后从左边遍历的依次按照是为负数时放到目标数组;

然后,与此同时也从右边遍历源关键字记录,为非负数时放到目标数组的右边(从右向左放)。

这样应该能够保证关键字的相对顺序不变,这个内容以后再测试

见有的网址说,和快速排序把枢轴选到第一个关键字有关系,这个问题也在以后作补充吧。

 

参考资料:

严蔚敏版数据结构

数据结构高分笔记

 

 

OS交流群欢迎你的加入!

群二维码:

先写到这么多

如有问题,敬请指正;

如需转载,请注明出处,谢谢!

 

转载于:https://www.cnblogs.com/ITCoderW/p/8021800.html

你可能感兴趣的文章
noip普及组2018T2 龙虎斗
查看>>
sql 事物以及回滚
查看>>
drawrect&layoutsubviews
查看>>
程序中如何获取Android的Root权限
查看>>
算法策略的总结
查看>>
[转]Core Audio
查看>>
UIScrollView的属性总结
查看>>
unicode 和utf-8,GBK编码
查看>>
php 设置模式 单元素模式(单例模式或单件模式)
查看>>
Linux下升级python版本
查看>>
正则表达式全集
查看>>
iOS开发小技巧--修改按钮内部图片和文字之间的间距(xib)
查看>>
[转]原始套接字编程
查看>>
经典海量jQuery插件
查看>>
如何在博客园随笔中增加章节导航
查看>>
eclipse中的.project 和 .classpath文件的具体作用
查看>>
ubuntu 绑定固定ip
查看>>
(转)linux下fork的运行机制
查看>>
vue-cli搭建及项目目录结构
查看>>
springboot秒杀课程学习整理1-5
查看>>