1. 程式人生 > >一維陣列的拷貝

一維陣列的拷貝

四種拷貝都是淺拷貝:
(1)for迴圈;
(2)clone;
(3)System.arraycopy(src,srcPos,dest,destPos,length)不產生新物件 底層呼叫native
src:源陣列 srcPos:源陣列要複製的起始位置 dest:目的陣列
destPos:目的陣列放置的起始位置 length:複製的長度
(4)Arrays.copyOf(luckyNumbers,luckyNumbers.length),產生新物件 返回值T[] 底層呼叫System.arraycopy;
1.將奇數放在偶數前面,大小順序不要求

sort(陣列名) 或 sort(陣列名,起始索引,結束索引,鍵值)

public static void SortNums(int[] nums,int low,int high) {
		while(low<high) {
			while(low<high && nums[low]%2 == 1 ) {
				low += 1;
			}
			while(low<high && nums[high]%2 == 0) {
				high -= 1;
			}
			int temp = nums[low];
			nums[low] = nums[high];
			nums[high] = temp;
		}
	}
	public static void main(String[] args) {
		int[] nums = {1,2,3,4,5,6,7,8,9,0};
		SortNums(nums,0,9);
		for (int i = 0; i < nums.length; i++) {
			System.out.print(nums[i]+"  ");
		}
		System.out.println();
	}
}

2.一個數組是有序的,給定一個key,有兩個數字加起來等於key,找到這兩個數字下標

3一個int陣列,除兩個數字出現一次,其他都是兩次,找出這個數字

4.如何排序陣列並插入某個元素

排序陣列用選擇排序或者氣泡排序
public static void main(String[] args){
int i,k;
int [] A = new int []{1,2,3,4,5,6,7,8,0};//0是預留位置,不屬於有序陣列內容
System.out.println("原始有序陣列:");
for (i = 0;i<A.length-1;i ++)
System.out.printf("%6d",A [i]);
System.out.println();
Scanner scan = new Scanner(System.in);
System.out.print("請輸入要插入到陣列的整數:");
String s = scan.nextLine();
int x = Interger.parseInt(s);//將數字字串化為等效的整數
int N = A.length-1;//陣列A的有效長度
for (k = 0;k<N;k++);{
if (x<A[k])
break;//找到資料插入的位置k
}//從最後一個元素往後平移,為新資料騰出位置
for (i = N;i>k;i--){
A[k] = x;
System.out.println("插入資料後的陣列: ");
for (int item :A)
System.out.printin("%6d",iem);
}
}

5.如何搜尋組中最小值和最大元素

public static void main(String[] args) {
		int[] a={1,2,3,4,5,6,7,8};
		getMaxAndMin0(a);
	}
	public static void getMaxAndMin0(int[] a){
		int min=a[0];
		int max=a[0];
		for (int i = 0; i +1< a.length; i+=2) {
			if(a[i]<a[i+1]){
				if(a[i]<min){
					min=a[i];
				}
				if(a[i+1]>max){
					max=a[i+1];
		}
			}else{
				if(a[i+1]<min){
					min=a[i+1];
				}
				if(a[i]>max){
					max=a[i];
				}
			}
		}
		System.out.println("max:  "+max);
		System.out.println("min:  "+min);
	}
	public static void getMaxAndMin(int[] a){
		int max=a[0];
		int min=a[0];
		for (int i = 0; i < a.length; i++) {
			if(a[i]>max){
				max=a[i];
			}else if(a[i]<min){
				min=a[i];
			}
			
		}
		System.out.println("max:  "+max);
		System.out.println("min:  "+min);
	}
	}

6.如何合併兩個陣列

String[] aa = {"11","22","33"};
String[] bb = {"44","55","66"};
// 合併兩個陣列
String[]  cc= new String[aa.length + bb.length];
System.arraycopy(aa, 0, cc, 0, cc.length);

7.如何填充陣列
fill(陣列名,值) 或 fill(陣列名,起始索引,結束索引,鍵值,值)//填充指定索引範圍

public static void main(String[] args) {
            int[] a = new int[5];

            Arrays.fill(a, 1);

            System.out.println(Arrays.toString(a));
    }

8.如何刪除陣列指定元素
我建立一個新的陣列,將刪除後的其他元素放入

     int[] arr = new int[] { 1, 2, 3, 4, 5 };
     System.out.println(Arrays.toString(arr));
     Scanner sc = new Scanner(System.in);
        System.out.println("請輸入要刪除第幾個元素:");
        int n = sc.nextInt(); //用來儲存要刪除陣列的位置
    // 定義一個新的陣列用來存放刪除後的陣列,長度為原來陣列-1
        int[] arrNew = new int[arr.length - 1];
        // 迴圈遍歷刪除第n個元素,並將剩餘元素放入新陣列
        for (int i = 0, j = 0; i < arr.length; i++) {
            if (i != (n - 1)) { //刪除元素的索引為n-1
                arrNew[j] = arr[i];
                j++;
            }
        }
        System.out.println(Arrays.toString(arrNew));
    }

9.如何從陣列中查詢常見元素

{
public static void main(String[] args)
{
int[] arr = new int[]{3,5,62,6,21,344,53};
int index = getIndex(arr,3);
System.out.println("index="+index);

int[] arra = new int[]{2,5,6,8,9,12,14,15,16,19};
int index2 = binarySearch_2(arra,16);
System.out.println("index2="+index2);
}
public static int getIndex(int[] arr,int key)
{
for(int x=0;x<arr.length;x++)
{
if(arr[x]==key)
{
return x;
}
}
return -1;
}