数组正负元素前后移动算法的实现(以0为分界线)
2014-06-06 21:36
375 查看
package test;
/**
* 数组正负元素前后移动算法的实现(以0为分界线,可以为其他任意一个数)
* 负数前移,放在数组前面部分,正数放在后面
* @author hao
*
*/
public class MoveNumTest {
/**
* @param args
*/
public static void main(String[] args) {
int[] nums = {342,6,3453645,-324, 1, 6, -4, 645, -3534, 34, -3, 345, 98956,-6 };
MoveNumTest test = new MoveNumTest();
test.movenum1(nums);
test.movenum2(nums);
}
private void movenum2(int[] nums) {
int left = 0;
int right = nums.length - 1;
while (left < right) {
int tmpLeft = 0;
for (; left < right; left++) {
if (nums[left] > 0) {
tmpLeft = nums[left];
break;
}
}
if (tmpLeft != 0) {
for (; right > left; right--) {
if (nums[right] < 0) {
nums[left] = nums[right];
nums[right] = tmpLeft;
break;
}
}
}
}
System.out.println("\nleft= " + left + ", right= " + right);
for (int i : nums) {
System.out.print(i + " ");
}
}
private void movenum1(int[] nums) {
int left = 0;
int right = nums.length - 1;
while (left < right) {
int tmpLeft = 0;
for (; left < right; left++) {
if (nums[left] > 0) {
tmpLeft = nums[left];
break;
}
}
int tmpRight = 0;
for (; right > left; right--) {
if (nums[right] < 0) {
tmpRight = nums[right];
break;
}
}
if (tmpLeft != 0 && tmpRight != 0) {
nums[left] = tmpRight;
nums[right] = tmpLeft;
}
}
System.out.println("left= " + left + ", right= " + right);
for (int i : nums) {
System.out.print(i + " ");
}
}
}
/**
* 数组正负元素前后移动算法的实现(以0为分界线,可以为其他任意一个数)
* 负数前移,放在数组前面部分,正数放在后面
* @author hao
*
*/
public class MoveNumTest {
/**
* @param args
*/
public static void main(String[] args) {
int[] nums = {342,6,3453645,-324, 1, 6, -4, 645, -3534, 34, -3, 345, 98956,-6 };
MoveNumTest test = new MoveNumTest();
test.movenum1(nums);
test.movenum2(nums);
}
private void movenum2(int[] nums) {
int left = 0;
int right = nums.length - 1;
while (left < right) {
int tmpLeft = 0;
for (; left < right; left++) {
if (nums[left] > 0) {
tmpLeft = nums[left];
break;
}
}
if (tmpLeft != 0) {
for (; right > left; right--) {
if (nums[right] < 0) {
nums[left] = nums[right];
nums[right] = tmpLeft;
break;
}
}
}
}
System.out.println("\nleft= " + left + ", right= " + right);
for (int i : nums) {
System.out.print(i + " ");
}
}
private void movenum1(int[] nums) {
int left = 0;
int right = nums.length - 1;
while (left < right) {
int tmpLeft = 0;
for (; left < right; left++) {
if (nums[left] > 0) {
tmpLeft = nums[left];
break;
}
}
int tmpRight = 0;
for (; right > left; right--) {
if (nums[right] < 0) {
tmpRight = nums[right];
break;
}
}
if (tmpLeft != 0 && tmpRight != 0) {
nums[left] = tmpRight;
nums[right] = tmpLeft;
}
}
System.out.println("left= " + left + ", right= " + right);
for (int i : nums) {
System.out.print(i + " ");
}
}
}
相关文章推荐
- 算法导论-第12章-二叉搜索树:随机二叉搜索树数据结构C++实现(前中后序遍历,插入,搜索,前后毗邻元素,最大最小值)
- 小算法--数组中元素的移动
- 【LeetCode-面试算法经典-Java实现】【026-Remove Duplicates from Sorted Array(删除排序数组中的重复元素)】
- JavaScript实现删除数组重复元素的5种常用高效算法总结
- 将数组中指定数量的元素移动数组后面的实现代码
- 不重复随机数列生成算法2-数组有效位置的最后一个元素移动到当前位置
- 借鉴快速排序的思想,实现算法将整型数组a[0...n]分成两块,使得第一块元素均大于等于0,第二块的元素均小于0,要求算法原地工作且时间复杂度为O(n)
- C语言实现一个数组每个元素依次向右移动k位(后面的往前面补,不开辟新空间)
- 从一个数组中找出第k小元素的随机化算法 c语言实现 算法导论第九章
- 数组中取相同的元素算法实现
- Javascript实现数组中的元素上下移动
- 【算法】快速排序算法(递归实现 从小到大排列) 排序范围(0~n-1) n为数组元素个数
- C语言 选择排序算法原理和实现 从数组中 找出最小的元素然后交换位置
- 已知一个整数数组A[n],写出算法实现将奇数元素放在数组的左边,将偶数放在数组的右边。要求时间复杂度为O(n)。
- 用JAVA编写一个算法实现对一个字符数组的所有元素的所有组合
- 【LeetCode-面试算法经典-Java实现】【027-Remove Element(删除数组中指定的元素)】
- 约瑟夫问题 算法很简单保证每个人都能看懂用的是模拟现实 用数组实现 利用循环删除数组中的元素
- 数组移动算法算法实现
- 完美算法 --将一个具有n个元素的数组向左循环移动i个位置
- Java基于可扩充数组的向量实现(算法源码)