package lessones02; import others.PrimeGetter; import lessones01.LinkedList; public class ArrayUtil{ public static void reverseArray(int[] arg_arr){ for(int i = arg_arr.length/2;i>0;i--){ //��Ϊȷ����int���͵��������Կ�����ô�� arg_arr[i-1] ^= arg_arr[arg_arr.length - i]; arg_arr[arg_arr.length - i] ^= arg_arr[i-1]; arg_arr[i-1] ^= arg_arr[arg_arr.length - i]; } } public static int[] removeZero(int[] arg_arr){ int zeroNum = 0; //��������漸��for��������������ôд������(���)��õ㣬���ǿ��ɶ��Ի������� for(int i=0;i<arg_arr.length;i++){if(arg_arr[i] == 0){zeroNum++;}} int[] newArray = new int[arg_arr.length - zeroNum]; int f = 0; for(int x=0;x<arg_arr.length;x++){if(arg_arr[x] != 0){newArray[f++] = arg_arr[x];}} return newArray; } public static int[] merge(int[] arg_arr1,int[] arg_arr2){ int s = 0; int f1=0; int f2=0; //�о������ƴ��룬�����벻������ô�Ż� for(;f1<arg_arr1.length&&f2<arg_arr2.length;s++){ if(arg_arr1[f1] == arg_arr2[f2]){ f1++; f2++; }else if(arg_arr1[f1] > arg_arr2[f2]){ f2++; }else/*if(arg_arr1[f1] < arg_arr2[f2])*/{ f1++; } } int[] arr = new int[s]; for(s=0,f1=0,f2=0;f1<arg_arr1.length&&f2<arg_arr2.length;s++){ if(arg_arr1[f1] == arg_arr2[f2]){ arr[s] = arg_arr1[f1]; f1++; f2++; }else if(arg_arr1[f1] > arg_arr2[f2]){ arr[s] = arg_arr2[f2]; f2++; }else/*if(arg_arr1[f1] < arg_arr2[f2])*/{ arr[s] = arg_arr1[f1]; f1++; } } return arr; } public static int[] grow(int[] arg_arr,int arg_size){ int[] arr = new int[arg_arr.length + arg_size]; int s = arg_arr.length; for(int i=0;i<s;i++){arr[i] = arg_arr[i];} int x = s; for(s+=arg_size;x<s;x++){arr[x] = 0;} return arr; } public static int[] fibonacci(int max){ return makeFibonacci(0,1,1,max); } private static int[] makeFibonacci(int num,int a,int b,int max){ if(a < max){ int[] temp = makeFibonacci(num+1,b,a+b,max); temp[num] = a; return temp; }else{ return new int[num]; } } public static int[] getPrimes(int max){ int i=0; for(;PrimeGetter.get(i)<max;i++){} int[] arr = new int[i]; for(i--;i>=0;i--){arr[i] = PrimeGetter.get(i);} return arr; } private static int[] two_s_TimesEnd = {8,6,2,4}; public static int[] getPerfectNumbers(int arg_num){ LinkedList<Integer> arr = new LinkedList<Integer>(); for(int i=2;;i++){ int z = (int)Math.pow(2,i) - 1; int zz = z*two_s_TimesEnd[i&3]; if(zz%10 == 8||zz%10 == 6){ if(PrimeGetter.isPrime(z)){ int zzz = (int)Math.pow(2,i-1)*z; if(zzz<arg_num&&zzz>0){ arr.add(zzz); System.out.println(zzz); }else{ break; } } } } int[] numbers = new int[arr.size()]; for(int i =0;i<arr.size();i++){numbers[i] = arr.get(i);} return numbers; } public static void main(String[] args){ int[] a = fibonacci(15); for(int i=0;i<a.length;i++){ System.out.println(a[i]); } System.out.println("========================="); a = grow(a,5); for(int i=0;i<a.length;i++){ System.out.println(a[i]); } System.out.println("========================="); a = removeZero(a); for(int i=0;i<a.length;i++){ System.out.println(a[i]); } System.out.println("========================="); reverseArray(a); for(int i=0;i<a.length;i++){ System.out.println(a[i]); } System.out.println("========================="); a = getPrimes(1000); for(int i=0;i<a.length;i++){ System.out.println(a[i]); } System.out.println("========================="); a = getPerfectNumbers(40000000); for(int i=0;i<a.length;i++){ System.out.println(a[i]); } System.out.println("========================="); } }