二分法查找
public static int binarySearch(int[] a, int key) {
if (a.length == 0) {
return -1;
}
int low = 0;
int high = a.length - 1;
while (low <= high) {
int mid = (low + high) / 2;
int midValue = a[mid];
if (key == midValue) {
return mid;
} else if (key < midValue) {
// 左邊
high = mid - 1;
} else {
low = mid + 1;
}
}
return -1;
}
冒泡排序
public static void bubbleSort(int[] a) {
if (a.length <= 1) {
return;
}
// 一共循環(huán) a.length -1 趟
for (int i = 0; i < a.length - 1; i++) {
for (int j = 0; j < a.length - 1 - i; j++) {
int left = a[j];
int right = a[j + 1];
if (left > right) {
int temp = a[j];
a[j] = a[j + 1];
a[j + 1] = temp;
}
}
}
}
選擇排序
public static void selectSort(int[] a) {
if (a.length <= 1) {
return;
}
// 循環(huán) a.length - 1 趟
// 每趟選出最小的值
for (int i = 0; i < a.length - 1; i++) {
int lowestIndex = i;
for (int j = i + 1; j < a.length; j++) {
if (a[lowestIndex] > a[j]) {
lowestIndex = j;
}
}
if (lowestIndex != i) {
int temp = a[i];
a[i] = a[lowestIndex];
a[lowestIndex] = temp;
}
}
}
插入排序
public static void insertionSort(int[] a) {
if (a.length <= 1) {
return;
}
for (int i = 1; i < a.length; i++) {
int temp = a[i];
int j = i - 1;
while (j >= 0 && a[j] > temp) {
// 右移動
a[j + 1] = a[j];
j--;
}
a[j + 1] = temp;
}
}
快速排序
public static void quickSort(int[] a, int left, int right) {
if (a.length <= 1) {
return;
}
if (left > right) {
return;
}
int pivot = a[left];
int i = left;
int j = right;
while (i != j) {
// 先從右邊開始比對
while (a[j] >= pivot && i < j) {
// 右邊左移
j--;
}
// 再比對左邊
while (a[i] <= pivot && i < j) {
// 左邊右移
i++;
}
// 交換i 和 j的位置
if (i < j) {
int temp = a[i];
a[i] = a[j];
a[j] = temp;
}
}
// 當(dāng)i == j 的時候吴旋, 說明找到了中軸的正確位置, 將中軸值賦予在中軸位置
a[left] = a[i];
a[i] = pivot;
// 再次分兩邊 遞歸排序 其中i的位置已經(jīng)是真正的中軸位置练俐,是已經(jīng)排好了的
// 左邊
quickSort(a, left, i - 1);
// 右邊
quickSort(a, i + 1, right);
}