一維陣列的拷貝
阿新 • • 發佈:2018-12-12
四種拷貝都是淺拷貝:
(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;
}