典型的二分查詢
對於二分查詢演算法要求, 查詢前的資料必須是已經排好序的, 然後得到陣列的開始位置start和結束位置end, 取中間位置mid的資料a[mid]跟待查詢資料key進行比較, 若 a[mid] > key, 則取end = mid - 1; 若 a[mid] < key, 則取start = mid + 1; 若 a[mid] = key 則直接返回當前mid為查詢到的位置. 依次遍歷直到找到資料或者最終沒有該條資料. 囉嗦這麼多, 上**!!!
//已經排好序的陣列public static int binarysearch(int nums, int key) else if (nums[mid] > key) else if (nums[mid] < key)
}return -1;
}
排序演算法
排序演算法可以說是老生常談的問題, 下面的**思路是根據 嚴蔚敏的《資料結構》而來.
務必注意: 以下所有的排序演算法都是從1開始, 而不是從0開始, 有的排序演算法會把0位置當作監視哨
今天就介紹一下幾種常見的排序演算法:
排序之前先寫乙個交換方法後面會用到
//交換
private static void swap(int a, int i, int j)
插入排序
穩定,時間複雜度 o(n^2)
//插入排序public static void insertsort(int a)
a[j + 1] = a[0];}}
}
選擇排序
選擇排序的基本思想是對待排序的記錄序列進行n-1遍的處理,第i遍處理是將l[i…n]中最小者與l[i]交換位置。這樣,經過i遍處理之後,前i個記錄的位置已經是正確的了。
不穩定, 時間複雜度 o(n^2)
/選擇排序
public static void selectsort(int a)
}}// 查詢從i開始到a.length中最小的位置
private static int selectminkey(int a, int i)
}return key;
}
氣泡排序
氣泡排序方法是最簡單的排序方法。這種方法的基本思想是,將待排序的元素看作是豎著排列的「氣泡」,較小的元素比較輕,從而要往上浮。在氣泡排序演算法中我們要對這個「氣泡」序列處理若干遍。所謂一遍處理,就是自底向上檢查一遍這個序列,並時刻注意兩個相鄰的元素的順序是否正確。如果發現兩個相鄰元素的順序不對,即「輕」的元素在下面,就交換它們的位置。顯然,處理一遍之後,「最輕」的元素就浮到了最高位置;處理二遍之後,「次輕」的元素就浮到了次高位置。在作第二遍處理時,由於最高位置上的元素已是「最輕」元素,所以不必檢查。一般地,第i遍處理時,不必檢查第i高位置以上的元素,因為經過前面i-1遍的處理,它們已正確地排好序。
穩定,時間複雜度 o(n^2)
//氣泡排序
public static void bubblesort(int a) }}
}
快速排序
不穩定,時間複雜度 最理想 o(nlogn) 最差時間o(n^2)
快速排序是對氣泡排序的一種本質改進。它的基本思想是通過一趟掃瞄後,使得排序序列的長度能大幅度地減少。在氣泡排序中,一次掃瞄只能確保最大數值的數移到正確位置,而待排序序列的長度可能只減少1。快速排序通過一趟掃瞄,就能確保某個數(以它為基準點吧)的左邊各數都比它小,右邊各數都比它大。然後又用同樣的方法處理它左右兩邊的數,直到基準點的左右只有乙個元素為止。
//快速排序
public static void quicksort(int a, int low, int high)
}//獲取到a的下標 low ~ high 中, a[low]的應該放的位置, 即左邊的數 < a[low] 右邊的數 > a[low]
private static int partitionloc(int a, int low, int high)
a[low] = a[high];
while (low < high && a[low] <= a[0])
a[high] = a[low];
}a[low] = a[0];
return low;
}
6種內部排序演算法 Java實現
一 直接插入排序 待排序陣列 a 0.n 1 排序思路 首先我們認為a 0 是已經排好序的,在排序過程中,依次將a i i 1,2,n 1 從後往前插入到前面已經 排 好序的子陣列a 0.i 1 中的適當位置中,待所有的a i 插入完畢,即排序完畢。演算法如下 空間上,該演算法僅需要常數個輔助單元,...
JAVA基礎 6種常用排序演算法
各種排序的時間 空間複雜度 穩定性是指排序中 相同的數在排序前後,他們的 相對位置不會發生改變。1.直接插入排序 經常碰到這樣一類排序問題 把新的資料插入到已經排好的資料列中。將第乙個數和第二個數排序,然後構成乙個有序序列 將第三個數插入進去,構成乙個新的有序序列。對第四個數 第五個數 直到最後乙個...
八種排序演算法 Java實現
基本思想 在要排序的一組數中,選出最小的乙個數與第乙個位置的數交換 然後在剩下的數當中再找最小的與第二個位置的數交換,如此迴圈到倒數第二個數和最後乙個數比較為止。實現 public class selectsort selectsort a for int i 0 i public static v...