交错正负数

1.给出一个含有正整数和负整数的数组,重新排列成一个正负数交错的数组。写一个函数实现此功能。


注意事项:

不需要保持正整数或者负整数原来的顺序。


挑战:

原地完成,没有额外的空间


格式:


输入第一行输入一个原始数组,最后输出重新排列后的数组。


样例输入:


[ -1,-2,-3,4,5,6 ]

样例输出:


[ -1,5,-2,4,-3,6 ]


解析(java编写):

package com.ever.test;


import java.io.IOException;
import java.util.Scanner;
/**
 * 解题思路:
 * 		1.数组0个或1个元素时,直接返回
 * 		2.数组多个元素时,负数放在左边,整数放在右边:---------->(1).偶数个元素:从第二个元素开始arr[left](left=1)和arr[right](right=arr.length-1)交换,
 * 									然后left+2和right-2继续进行交换,直到 left>right为止
 * 							----------->(2).奇数个元素:奇数个元素,负整数(正整数)比正整数(负整数)多一个时,中间那个元素和最后一个元素交换,然后执行第一步(1)
 * @author Administrator
 *
 */
public class Test {

	public static void main(String[] args) throws IOException {
		
		int m; 											// ------------数组长度
		int[] arr;										//-------------用数组接收
		Scanner sc = new Scanner(System.in);
		System.out.println("请输入该数组的长度m:");
		m = sc.nextInt();
		arr = new int[m];
		for(int i = 0; i < m; i++){
			System.out.println("依次输入该数组的各个元素:");
			arr[i] = sc.nextInt();
		}
		range(arr);										//------------调用函数
		for (int i = 0; i < arr.length; i++) {			//------------打印
			System.out.print(arr[i]+"\t");
			
		}
		System.out.println();
		
	}
	public static void range(int[] arr)  
		 {  
		      if(arr.length==0||arr.length==1)  		//当数组长度为0或1时
		          return;  
		      int a=-1;  
		      int b=0;  
		      while(b<arr.length)  //负数放在左边,整数放在右边
		      {  
		          if(arr[b]<0)  
		          {  
		              a++;  
		              int temp=arr[b];  
		              arr[b]=arr[a];  
		              arr[a]=temp;  
		                 
		          }  
		              b++;  
		      }  
		         
		      int left=1;  
		      int right=arr.length-2;  
		      if(arr.length%2==1)  //奇数个元素,负整数比正整数多一个时,中间那个元素和最后一个元素交换
		      {  
		          if(arr[arr.length/2]<0)  
		          {  
		        	  int temp2=arr[arr.length/2];  
		        	  arr[arr.length/2]=arr[arr.length-1];  
		        	  arr[arr.length-1]=temp2;  
		              left=1;  
		              right=arr.length-3;  
		          }  
		          else  //正整数比负整数多一个时,中间那个元素和第一个元素交换
		          {  
		              int temp3=arr[arr.length/2];  
		              arr[arr.length/2]=arr[0];  
		              arr[0]=temp3;  
		              left=2;  
		              right=arr.length-2;   
		                 
		          }  
		             
		      }  
		         
		      while(left<right)  
		      {  
		          int temp1=arr[left];  
		          arr[left]=arr[right];  
		          arr[right]=temp1;  
		          left=left+2;  
		          right=right-2;     
		      }  
		        
	}
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值