数组练习题(冒泡排序 copyOf 移位 求平均值 偶数在前,奇数在后)

 1.模拟实现Arrays.coptOf

import java.util.Arrays;
public class jk{
	public static void main (String[]args){
		int [] a={1,2,3,4,5};
		System.out.println(Arrays.toString(Arrays.copyOf(a,5)));
	}
	public static int[] copyOf(int [] a,int newlength){
		int [] b=new int [newlength];
		int length=a.length<=newlength?a.length:newlength;
			for(int i=0;i<length;i++){
				 b[i]=a[i];
			 }
			 return b;
		 
	 }
}//复制数组中元素	

2.java 冒泡排序法

import java.util.Arrays;
public class jk{
	public static void main(String[] args){
		//有序[a.length-i,a.length)
		//无序[0,a.length-i)
		
		int []a ={1,2,3,4};
		int []b={4,3,2,1};
		int []c={3,3,3,3};
		int []d={1,3,2,4};
		testBubbleSort(a);
		System.out.println(Arrays.toString(a));
		testBubbleSort(b);
		System.out.println(Arrays.toString(b));
		testBubbleSort(c);
		System.out.println(Arrays.toString(c));
		testBubbleSort(d);
		System.out.println(Arrays.toString(d));

	}
	public static void testBubbleSort(int []a){
		
			for(int i=0;i<a.length;i++)
			{
				boolean sorted=true;
				for(int j=1;j<a.length-i;j++)
				{
					if(a[j-1]>a[j])
					{
						int p=a[j-1];
						a[j-1]=a[j];
						a[j]=p;
						sorted=false;
					}
				}
				if(sorted==true)//未发生任何交换,则表明有序
					return;
			}
			
	}
}//冒泡排序

3.去掉最大值及最小值求数组的平均值

public class jk{
	public static void main(String[] args){
     int []a={1,2,3,4,5};
	 double ave=average(a);
	 System.out.println(ave);
	}
	public static double average(int []a){
		int max=a[0];
		int min=a[0];
		int sum=0;
		for(int i=0;i<a.length;i++){
			sum=sum+a[i];
			if(a[i]>max){
				max=a[i];
			}
			if(a[i]<min){
				min=a[i];
			}
		}
		return (double)((sum-min-max)/(a.length-2));
	}
}

4.对数组进行右移操作

//方法1:逐个移位
import java.util.Arrays;
public class jk{
	 public static void main(String[] args){
		int []a={1,2,3,4,5,6};
		rotate(a,3);
	 }
	 public static void rotate(int []a,int k){
		 for(int i=0;i<k;i++)
		 {
			 int b=a[a.length-1];
			for(int j=a.length-1;j>0;j--)
			 {
				 a[j]=a[j-1];
			 }
			 a[0]=b;
			 
		 }
		 System.out.println(Arrays.toString(a));
	 }
}
//方法2将要进行变动的部分整体移动
import java.util.Arrays;
public class jk{
	 public static void main(String[] args){
		int []a={1,2,3,4,5,6};
		System.out.println(Arrays.toString(rotate(a,3)));
	 }
	 public static int [] rotate(int []nums,int k){
		  k=k%nums.length;
		  int []rightPart=Arrays.copyOfRange(nums,nums.length-k,nums.length);
		  System.arraycopy(nums,0,nums,nums.length-k,k);
		  System.arraycopy(rightPart,0,nums,0,nums.length-k);
		  return nums;
	 }
}

5.对一个数组实现偶数在前,奇数在后

<1.分别定义两个标记,从数组的左右两端开始进行判断奇偶数

import java.util.Arrays;
public class jk{
	public static void main (String[]args){
		int [] a={4,3,1,6,7};
		System.out.println(Arrays.toString(partition1(a)));
		System.out.println(Arrays.toString(partition2(a)));

	}

	public static int[] partition1(int []nums){
		int begin=0;
		int end=nums.length-1;
		while(begin<end)
		{
			while(nums[begin]%2==0&&begin<end)
			{
			begin++;
			}
			while(nums[end]%2!=0&&begin<end)
			{
			end--;
			}
			swap(nums,begin,end);
		}
		return nums;
	}
        public static void swap(int []nums,int a,int b){
		int p=nums[a];
		nums[a]=nums[b];
		nums[b]=p;
	}
}

<2.定义一个指向数组开头的变量,当数组元素为偶数数,将下标与该变量交换

import java.util.Arrays;
public class jk{
	public static void main (String[]args){
		int [] a={4,3,1,6,7};
		System.out.println(Arrays.toString(partition1(a)));
		System.out.println(Arrays.toString(partition2(a)));

	}
        public static int[] partition2(int []nums){
		int d=0;
		for(int i=0;i<nums.length;i++)
		{
			if(a[i]%2==0)
			{
				swap(nums,i,d);
				d++;
			}
		}
		return nums;
	}
        public static void swap(int []nums,int a,int b){
		int p=nums[a];
		nums[a]=nums[b];
		nums[b]=p;
	}

	
}
发布了40 篇原创文章 · 获赞 4 · 访问量 901

猜你喜欢

转载自blog.csdn.net/weixin_44919969/article/details/96480205