排序使得数组负数在正数左边且按照原来的顺序
2014-04-07 18:46
543 查看
假设一整型数组存在若干正数和负数,现在通过某种算法使得该数组的所有负数在正数的左边,且保证负数件和正数间元素相对位置不变。时空复杂度要求分别为:o(n),o(1)
例如
-3 4 2 -1 7 3 -5
排序后
-3 -1 -5 4 2 7 3
采用整体冒泡的思想,先从后找到第一个负数,然后把这一个负数看成一个“元素”,再看这个负数前面是正数还是负数,如果是负数,那么把这个“元素”扩大,如果是正数,就把这个“元素”和这个正数交换位置,从后向前冒泡一遍就OK。
例如
-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; }
相关文章推荐
- 数组排序使得数组负数在正数左边且按照原来的顺序
- 排序使得数组负数在正数左边且按照原来的顺序
- 一个未排序整数数组,有正负数,重新排列使负数排在正数前面,并且要求不改变原来的正负数之间相对顺序,比如: input: 1,7,-5,9,-12,15 ans: -5,-12,1,7,9,15 要求时
- 一个未排序整数数组,有正负数,重新排列使负数排在正数前面,并且要求不改变原来的正负数之间相对顺序,比如: input: 1,7,-5,9,-12,15 ans: -5,-12,1,7,9,15 要求时
- 一个未排序整数数组,有正负数,重新排列使负数排在正数前面,并且要求不改变原来的正负数之间相对顺序。 要求时
- 一个未排序整数数组,有正负数,重新排列使负数排在正数前面,并且要求不改变原来的相对顺序.
- 【大家来一起讨论吧】百度面试题,假设一整型数组存在若干正数和负数,现在通过某种算法使得该数组的所有负数在正数的左边,且保证负数件和正数间元素相对位置不变。时空复杂度要求:o(n),o(1)
- 算法1:一个无序的int数组,包含正负数, 排序成:左边为负数 右边为正数
- python读取TXT到数组及列表去重后按原来顺序排序的方法
- 已有一个已经排好序的数组,输入一个数,要求按照原来排序的规律将它插入数组中
- 数组里的正数和负数排序
- 某数组里存在乱序的正负数字,要求将负数放到左边,正数放到右边,并且正负数的相对位置不改变
- 题目:在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。
- C语言:【面试题】在二维数组中,每行每列都按照递增的顺序排序,判断数组中是否包含一个数。
- 在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。
- 调整数组 使得数组中负数排在前面正数排在后面,并且正数和负数的相对位置不变 (递归思路)
- 题目:在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。
- 在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。
- 在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。
- 按照字典顺序对字符串数组进行从大到小的排序。