數組相關總練習

  3 import java.util.Arrays;
  6 public class ArrayExer4 {
  7     /*
  8     記住:
  9     十大內部排序算法以下:
 10 
 11     選擇排序(2種 說明:堆排序要理解排序方法實現思路)
 12         直接選擇排序、堆排序
 13     交換排序(2種 說明:這兩種須要會手寫)
 14         冒泡排序、快速排序
 15     插入排序(3種)
 16         直接插入排序、折半插入排序、Shell排序(也叫希爾排序)
 17     歸併排序(1種 說明:要理解排序方法實現思路)
 18     ********* 以上8種是經常使用的排序 ************
 19     桶式排序
 20     基數排序
 21     ********* 最後這2種是不經常使用的排序 ************
 22 
 23     理解:
 24     1)衡量排序算法的優劣
 25     時間複雜度、空間複雜度、穩定性
 26 
 27     2)排序的分類:內部排序(內存中)  與   外部排序(須要藉助於磁盤)
 28 
 29     3)不一樣排序算法的時間複雜度
 30     冒泡時間複雜度:O(n^2)  n的平方
 31     快排時間複雜度:O(nlog(n))
 32     堆排序、歸併排序
 33      */
 34 
 35     public static void main(String[] args) {
 36         int[] arr = new int[]{34,5,22,-98,6,-76,0,-3};
 37         /*
 38         使用冒泡排序,實現數組的從小到大排序
 39          */
 40 
 41         //長度爲8的數組,比較7輪
 42         for (int i = 0; i < arr.length-1; i++) {
 43             //每一輪都是從第一個元素與第二個元素比較,較大者放到右邊,依次比較,直到一輪結束時,最後一個元素是最大值,下一輪不參與比較
 44             for (int j = 0; j < arr.length-i-1; j++) {
 45                 int tmp = 0;
 46                 if(arr[j]>arr[j+1]){
 47                     tmp = arr[j];
 48                     arr[j] = arr[j+1];
 49                     arr[j + 1] = tmp;
 50                 }
 51             }
 52             //查看每一輪比較後的數組狀況
 53             System.out.println(Arrays.toString(arr));
 54         }
 55 
 56         System.out.println("******************");
 57         /*
 58         反轉上面的數組
 59          */
 60 
 61         for (int i = 0,j = arr.length -1; i < j; i++,j--) {
 62             int tmp;
 63             tmp = arr[i];
 64             arr[i] = arr[j];
 65             arr[j] = tmp;
 66         }
 67         System.out.println("反轉後的數組" + Arrays.toString(arr));
 68 
 69 
 70         System.out.println("******************");
 71         /*
 72         複製上面的數組
 73          */
 74         int[] arr2 = new int[arr.length];
 75         for (int i = 0; i < arr.length; i++) {
 76             arr2[i] = arr[i];
 77         }
 78         System.out.println("複製後的數組:" + Arrays.toString(arr2));
 79 
 80 
 81         System.out.println("******************");
 82         /*
 83         線性查找:經過遍歷方式,一個一個的數據進行比較、查找
 84         適用性:具備廣泛適用性。
 85         二分法查找:每次比較中間值與目標值的大小,折半的方式檢索
 86         適用性:(前提:數組必須有序)
 87         使用線性查找,從上面的數組中查找22是否存在,若是存在,返回所在位置索引,不存在,輸出提示信息
 88          */
 89 //        //查找目前元素值
 90 //        int dest = 2;
 91 //        //判斷標誌:若是找到了,則爲false,若是沒有找到,則不變一直依然爲true
 92 //        boolean flag = true;
 93 //        for (int i = 0; i < arr2.length; i++) {
 94 //            if(arr2[i] ==dest){
 95 //                System.out.println("數組中存在值爲" + dest +  "的元素,其索引是:" + i);
 96 //                //元素找到,判斷標誌設爲false
 97 //                flag = false;
 98 //                break;
 99 //            }
100 //        }
101 //        //flag 一直不變爲true,這說明程序從沒進入上面的if語句,也就是沒有找到目前元素
102 //        if (flag) {
103 //            System.out.println("抱歉,數組中沒有值爲" + dest +  "的元素!");
104 //        }
105 
106 
107         //第二種方式(拓寬思路:就是說i表明索引值不斷遞增,
108         // 遍歷完全部的元素都沒有查找到目標元素值的話,
109         // 那麼最後i遞增到循環條件不知足時,提示沒有找到就能夠了)
110         int dest = 2;
111         int i = 0;
112         for (i = 0; i < arr2.length; i++) {
113             if(arr2[i] == dest){
114                 System.out.println("數組中存在值爲" + dest +  "的元素,其索引是:" + i);
115                 break;
116             }
117         }
118         //若是目標元素找到了,那麼i確定是i<arr2.length.
119         // 若是沒有找到,i必然會遞增到i == arr2.length的時候
120         if(i == arr2.length){
121             System.out.println("抱歉,數組中沒有值爲" + dest +  "的元素!");
122         }
123 
124         System.out.println("******************");
125         /*
126         數組中常見的異常有哪些?舉例說明
127          */
128 
129         //ArrayIndexOutOfBoundsException:數組索引越界異常
130         //合理範圍:[0,arr.length-1]
131         //越界:arr[-1],arr[arr.lenth]
132 
133         //NullPointerException:空指針異常
134         //int[] arr = null;
135         //arr[0];  空指針異常
136     }
137 }
相關文章
相關標籤/搜索