數組排序、遞歸——(Java學習筆記二)

升序: 
    選擇排序:
        選定一個元素,一次和後面的元素相比較,若是選定的元素大雨後面的比較元素,就交換位置
        先出現最小值,最後出現最大值。
 public static void main(String[] args) {
  int[] arr = {5,8,9,12,55,565,421,12,2512,-5,-56};
  sortMethod(arr);
  p(arr);
 }
   //排序核心代碼
 private static void sortMethod(int arr[]) {
  for(int i = 0 ;i<arr.length - 1;i++){
   for(int j = i + 1;j<arr.length;j++){
    if(arr[i] > arr[j]){
     int temp = arr[j];
      arr[j] = arr[i];
      arr[i] = temp;
    }
   }
  }
 }
 
//打印數組元素
 static void p(int[] arr) {
  String ret = "[";
  for(int i = 0;i<arr.length;i++){
   ret += arr[i];
   if(i == arr.length - 1){
    ret += "]";
   }else{
    ret += ",";
   }
  }
  System.out.println("---------->"+ret);

  

 冒泡排序:
        相鄰兩個元素依次相比較
        先出現最大值,最後出現最小值。
public static void main(String[] args) {
  int arr[] = {6,9,4589,442,458,5232,-788,7,545,-44,55,-11};
  sortMethod(arr);
  p(arr);
 }
 private static void p(int[] arr) {
  String ret = "[";
  for(int i = 0; i < arr.length; i ++){
   ret += arr[i];
   if( i == arr.length - 1){
    ret += "]";
   }else{
    ret += ",";
   }
  }
  System.out.println("---------->" + ret);
 }
 private static void sortMethod(int[] arr) {
  for(int j = 1;j<arr.length;j++){
   for(int i = 0; i <arr.length - j;i++){
    if(arr[i] > arr[i + 1]){
     int temp = arr[i];
     arr[i] = arr[i + 1];
     arr[i + 1] = temp;
    }
   }
  }
 }
二分查找法:
    先對代碼進行排序,再取中間值,再拿指定值跟中間值進行比較,若是小於中間值,查找範圍就變成最小的索引值到中間值索引減1,若是指定值大於中間值,則查找範圍變成中間值索引加1到最大的索引值。
優勢:縮小查找範圍,提升性能
 1 //查找指定數組指定元素的索引值。    
 2 public static void main(String[] args) {
 3   int[] arr = {5,4,231,45,75,45,11,-11,-21,-45};
 4   int key = 45;
 5   sortMethod(arr);
 6   printSort(arr);
 7   int index = binarySeach(arr,key,0,arr.length - 1);
 8   System.out.println("----------->所求索引值:"+index);
 9  }
10 //二分查找法核心代碼
11  private static int binarySeach(int[] arr, int key,int fromIndex,int toInedx) {
12   //最小索引與最大索引
13   //fromIndex 表示從哪一個位置開始查找,toIndex表示到那個位置結束
14   int minIndex = fromIndex,maxIndex = toInedx;
15   while(maxIndex >= minIndex){
16    //中間索引
17    int midIndex = (maxIndex + minIndex)/2;
18    //中間索引的值
19    int midIndexVal = arr[midIndex];
20    if(key > midIndexVal){
21     minIndex = midIndex + 1;
22    }else if(key < midIndexVal){
23     maxIndex = midIndex - 1;
24    }else{
25     return midIndex;
26    }
27   }
28   return -1;
29  }
30 //打印排序後的代碼
31  private static void printSort(int[] arr) {
32   String ret = "[";
33   for(int i = 0;i<arr.length;i++){
34    ret +=arr[i];
35    if(i == arr.length - 1){
36     ret += "]";
37    }else{
38     ret += ",";
39    }
40   }
41   System.out.println("----------->排序:" + ret);
42  }
43 //對代碼進行排序
44  private static void sortMethod(int[] arr) {
45   for(int j = 0;j<arr.length - 1;j++){
46    for(int i = 0;i<arr.length - j - 1;i++){
47     if(arr[i] > arr[i + 1]){
48      int temp = arr[i];
49       arr[i] = arr[i+1];
50       arr[i+1] = temp;
51     }
52    }
53   }
54  }

數組的拷貝:java

 1     /**
 2  *
 3  * @author Essence
 4  *arraycopy(Object src, int srcPos, Object dest,int destPos, int length)
 5  *該方法接收四個參數
 6  *object src :原數組,即被拷貝的數組
 7  *int srcPos: 原數組的目標位置 即從哪一個位置開始拷貝起
 8  *Object dest:目標數組 即用來存儲被拷貝的數組
 9  *int destPos:目標數組中的起始位置,即向目標數組中插入數據的起始位置
10  *int length:要複製的元素數量
11  */
12     public static void main(String[] args) {
13   String[] arr = {"A","B","C","D"};
14   String[] arr1 = new String[5];
15   System.out.println(Arrays.toString(arr1)); // 拷貝以前 : [null, null, null, null, null]
16   System.arraycopy(arr, 1, arr1,2, 3);
17   System.out.println(Arrays.toString(arr1)); //拷貝以後: [null, null, B, C, D]
18  
19  }

可變參數:編程

 1 /**
 2  * Java5 出現的新特性 參數可變
 3  * 可變參數必須做爲參數的最後一個參數 ,參數能夠直接傳遞0到n個
 4  *其本質上就是數組
 5  * method(int ... arr)
 6  * @author Essence
 7  *
 8  */
 9     public static void main(String[] args) {
10   int[] arr = {1,2,347,7,78,9};
11   System.out.println(getSum(arr));
12   /**
13    * 可變參數調用特色:
14    * getSum(1,2,34,5)
15    */
16   System.out.println(getSum(1,2,34,5));
17  
18  }
19  private static int getSum(int ... arr) {
20   int sum = 0;
21   for(int i = 0;i<arr.length;i++){
22    sum += arr[i];
23   }
24   return sum;
25  }
26  }
可變參數能夠當作一位數組來調用:getSum(new int[] {1,2,3,4,5});
也能夠直接寫參數,個數任意,可是類型必須一致:getSum(1,2,34,5)
遞歸:
    基本思想:本身調用本身
    結構:
        遞歸頭:定義遞歸結束的時候,何時不調用自身方法。若是沒有定義頭,將會陷入死循環
        遞歸體:何時須要調用自身方法
利用遞歸解決階乘問題:
 1   public class Demo{
 2             public static void main(String[] args) {
 3   long sum = factorial(10);
 4   System.out.println(sum);
 5  }
 6  static long factorial(int n){
 7   if(n==1){
 8    return 1;
 9   }else{
10    return n*factorial(n-1);
11   }
12  }
13 }

Java編程思想上的兩個題斐波那契數列與吸血鬼數字數組

斐波那契數列:  性能

/*
* 1,1,2,3,5,8,13,21,34
* 起那兩個數是第三個數的和
* 斐波那契數列
* F(n) = F(n-1)+F(n-2)
*/
方法一:
private static void fibonacci(int n) { int arr[] = new int[n],sum = 0; arr[0] = arr[1] = 1; for(int i = 2;i<arr.length;i++){ arr[i] = arr[i - 1] + arr[i-2]; System.out.println("arr["+i+"] "+arr[i]); sum += arr[i]; } System.out.println("斐波那契數列之和:" +sum); } 方法二: private static int sumFibonacci(int n) { if(n<1){ return 1; }else{ return sumFibonacci(n - 1) + sumFibonacci(n - 2); } } private static void getFibonacci(int n) { for(int i = 0;i <= n;i++){ int f = sumFibonacci(i); System.out.print(f + "\t"); if(i%3 == 0){ System.out.println(); } } } 方法三: private static void fibbonacci1(int n){ int a = 1,b = 1,c = 0 , sum = 0; System.out.println(a+"\t"+b+"\t"); for(int i = 1;i<=n;i++){ c =a +b; a = b; b = c; sum += c; System.out.print(c+"\t"); if(i%3==0){ System.out.println(); } } System.out.println("斐波那契數列之和:" +sum); }

吸血鬼數字:spa

 

/*
*1260=21*60
*1827=21*87
*2187=27*81
*/
1
private static void vampireNumber1() { 2 for(int i = 1;i<100;i++){ 3 for(int j = 1;j<100;j++){ 4 if(i*j>1000){ 5 String a = i+""+j; 6 String b = i*j+""; 7 if(equals(a,b)){ 8 System.out.println(i+"\t"+j+"\t"+i*j); 9 } 10 } 11 } 12 } 13 } 14 private static boolean equals(String a, String b) { 15 // TODO Auto-generated method stub 16 char[] aArrays ,bArrays; 17 aArrays = a.toCharArray(); 18 bArrays = b.toCharArray(); 19 Arrays.sort(aArrays); 20 Arrays.sort(bArrays); 21 if(Arrays.equals(aArrays,bArrays)){ 22 return true; 23 } 24 return false; 25 }
相關文章
相關標籤/搜索