排序使得数组负数在正数左边且按照原来的顺序
来源:互联网 发布:中国程序员人才网 编辑:程序博客网 时间:2024/04/28 01:55
假设一整型数组存在若干正数和负数,现在通过某种算法使得该数组的所有负数在正数的左边,且保证负数件和正数间元素相对位置不变。时空复杂度要求分别为:o(n),o(1)
例如
-3 4 2 -1 7 3 -5
排序后
-3 -1 -5 4 2 7 3
采用整体冒泡的思想,先从后找到第一个负数,然后把这一个负数看成一个“元素”,再看这个负数前面是正数还是负数,如果是负数,那么把这个“元素”扩大,如果是正数,就把这个“元素”和这个正数交换位置,从后向前冒泡一遍就OK。
#include <iostream>using namespace std;void sort(int *a, int len){ int i; int dataLen = 1; for(int j=len-1; j>=0; j--) if(a[j] < 0) { i = j; break; } while(i > 0) { while(i>0 && a[i-1] < 0) { i--; dataLen++; } if(i == 0) break; //如果到最前面都是负数,那么已经排好了,直接返回 int temp = a[i-1]; memcpy(&a[i-1], &a[i], dataLen*sizeof(int));//这里注意memcpy的操作单位为字节 a[i+dataLen-1] = temp; i--; }}int main(){ int a[] = {-3, 4, 2, -1, 7, 3, -5}; int len = 7; sort(a, len); for(int i=0; i<len; i++) cout<<a[i]<<endl; return 0;}
- 排序使得数组负数在正数左边且按照原来的顺序
- 排序使得数组负数在正数左边且按照原来的顺序
- 假设一整型数组存在若干正数和负数,现在通过某种算法使得该数组的所有负数在正数的左边,且保证负数和正数间元素相对位置不变。时空复杂度要求分别为:o(n)和o(1)。
- 一个未排序整数数组,有正负数,重新排列使负数排在正数前面,并且要求不改变原来的相对顺序.
- 一个未排序整数数组,有正负数,重新排列使负数排在正数前面,并且要求不改变原来的正负数之间相对顺序。 要求时
- 数组里的正数和负数排序
- 数组里的正数和负数排序
- 负数在前正数在后且顺序不变
- 算法1:一个无序的int数组,包含正负数, 排序成:左边为负数 右边为正数
- 将数组里的负数排在数组的前面,正数排在数组的后面。但不改变原先负数和正数的排列顺序。
- 不改变相对顺序,负数左边正数右边
- 一个未排序整数数组,有正负数,重新排列使负数排在正数前面,并且要求不改变原来的正负数之间相对顺序,比如: input: 1,7,-5,9,-12,15 ans: -5,-12,1,7,9,15 要求时
- 将所给数组中的负数安排在左边,零安排在中间,正数安排在右边
- 划分一个整形数组,把负数放在左边,零放在中间,正数放在右边
- 不改变正负数相对顺序,重排数组,使负数在正数之前
- 给定一个无序数组,包含正数、负数和0,要求从中找出3个数的乘积,使得乘积最大
- Move Zeroes 去除0且按照原来顺序返回
- 在顺序存储模式下将所有的负数放到正数前面的三种算法
- ECMAScript 定义类或对象
- c++ final类
- Android 横屏时禁止输入法全屏
- Struts2结果类型
- 谷歌面试题:1024! 末尾有多少个0?
- 排序使得数组负数在正数左边且按照原来的顺序
- 在 DataGridView 控件中修改数据
- hdu 1166 敌兵布阵 树状数组 线段树
- JS about window.open();
- Bitmap的生成流程之BitmapFactory.decodeResource VS BitmapFactory.decodeStream
- JS中的prototype
- 关于函数返回值的几种情况
- Android 点击EditText focus 不在键盘之上时
- Modify CSS with JavaScript