冒泡算法
public static void bubbleSort(int[] a) {
for(int i = 0; i < a.length - 1; i++){//控制冒泡的總次數(shù)
for(int j = 0; j < a.length - 1 - i; j++){//控制兩兩之間的比較
if(a[j] > a[j + 1]){
int temp = a[j];
a[j] = a[j + 1];
a[j + 1] = temp;
}
}
}
}
}
選擇排序
public static void selectionSort(int[] a) {
for(int i = 0; i < a.length - 1; i++) {// i是要交換至的位置
int k = i;//k記錄當(dāng)前最小值的下標(biāo)(可能變化)
// 從k+1位置開始向右比較,尋找最小值的下標(biāo)
for(int j = k + 1; j < a.length; j++){
if(a[j] < a[k]){
k = j; //k記錄目前找到的最小值所在的位置
}
}
//完成上面循環(huán)后,k記錄了當(dāng)前輪最小值的下標(biāo)
if(i != k){ //交換a[i]和a[k]
int temp = a[i];
a[i] = a[k];
a[k] = temp;
}
}
}
插入排序
public static void insertSort(int[] a) {
for (int i = 1; i < a.length; i++) {//新數(shù)的位置
for (int j = i; j > 0; j--) {//與左邊的依次比較
if (a[j] < a[j - 1]) {//順序需要調(diào)整則交換
int temp = a[j];
a[j] = a[j - 1];
a[j - 1] = temp;
} else {
break;//提高效率,左邊都是有序的,
//新數(shù)據(jù)如果無需交換,則可以直接放入有序數(shù)列尾部
}
}
}
}
順序查找
public static int search(int[] a, int num) {
for(int i = 0; i < a.length; i++) {
if(a[i] == num){
return i;
}
}
return -1;
}
二分查找
public static int binarySearch(int[] a, int num) {
int low = 0; // 起點(diǎn)
int upper = a.length - 1; // 終點(diǎn)
while (low <= upper) {//避免出現(xiàn)下標(biāo)越界異常
int mid = (low + upper) / 2; // 中間點(diǎn)
if (a[mid] < num) { // 中間點(diǎn)的值小于要查找的值
low = mid + 1; // 更改查找的起點(diǎn)為中間點(diǎn)位置后一位
} else if (a[mid] > num) { // 中間點(diǎn)的值大于要查找的值
upper = mid - 1; // 更改查找的終點(diǎn)為中間點(diǎn)位置前一位
} else { // 中間點(diǎn)的值等于要查找的值
return mid; // 返回該位置
}
}
return -1;
}