數組算法

冒泡算法

原理:java

經過數組相鄰兩個數比較大小,獲得左小右大的排序。循環以上操做,將得到一個數組的最大數,並在數組最大索引處。算法

由於已經得到了最大數,下次循環次數-1,以此類推直至排序完。數組

代碼實現:優化

private static void bubleSort(int[] arr) {
        int js=arr.length-1;
        int tmp;
        for (int i = 0; i < js; i++) {
            for (int j = 0; j < js; j++) {
                if(arr[j]>arr[j+1]){
                    tmp=arr[j];
                    arr[j]=arr[j+1];
                    arr[j+1]=tmp;
                }
            }
            js--;
        }
    }

二分法查找

目的:在數組中查找一個數字的索引。ui

使用要求:基於排序,按照大到小,或小到大均可以。code

原理:排序

獲取數組中間索引的數組值,而後與要查找的數字進行比較,只有三種結果>、=、<,進行不一樣的判斷返回結果遞歸

代碼實現:索引

private static int binarySearch(int[] arr, int num) {
        int max=arr.length;
        int min=0;
        int tmp = 0;
        if(max<min){
            return -1;
        }
        for (int i = 0; i < arr.length; i++) {
            tmp=(max+min)/2;
            if(arr[tmp]>num)
                max=tmp;
            else if(arr[tmp]<num)
                min=tmp;
            else
                return tmp;
        }
        return tmp;
    }

快排法

目的:在數組中,規則排序。class

原理:

  1. 將數組一號元素定位基準
  2. 從最後一位元素開始於第一位元素盡心大小比較,查找比標準小的元素,找到一個後中止尋找。
  3. 從第二位元素開始尋找比基準大的元素,找到一個後中止尋找,再將第二步找到的元素與這個元素位置交換。
  4. 重複第二步和三步操做,直至二者索引相同。

此時得到的數組,相同的索引左邊都比中間索引的值小,索引右邊都比中間索引的值大。可經過遞歸實現後面數據排序操做。中間索引左邊的數據再次重複1234補,數組右邊同理。

代碼實現:

private static void quickSort(int[] arr, int left, int right) {
        if(left>right){
            return;
        }
        int start=left;
        int end=right;
        int jl=arr[start];
        while(left!=right){
            while (arr[right]>=jl&&right>left){
                right--;
            }
            while(arr[left]<=jl&&right>left){
                left++;
            }
            int tmp=arr[left];
            arr[left]=arr[right];
            arr[right]=tmp;
        }
        arr[start]=arr[right];
        arr[right]=jl;


        quickSort(arr,start,left-1);
        quickSort(arr,left+1,end);
    }

謝謝觀看,如發現錯誤優化,請指正謝謝,祝您學有所成。

相關文章
相關標籤/搜索