1.选择排序
选择排序的原理图:
冒泡排序的原理图:
相邻的2个元素进行比较,如果符合条件,换位。第一圈,最值出现在最后位…
原理:如何获取该元素在数组中的位置。使用折半查找。
选择排序的原理图:
内循环结束一次,最值出现在头角标位置上。
public static void selectSort(int[] arr) {
for (int x = 0; x < arr.length - 1; x++) {
for (int y = x + 1; y < arr.length; y++) {
if(arr[x] > arr[y]) {
int temp = arr[x];
arr[x] = arr[y];
arr[y] = temp;
}
}
}
}
2.冒泡排序
冒泡排序的原理图:
相邻的2个元素进行比较,如果符合条件,换位。第一圈,最值出现在最后位…
public static void bubbleSort(int[] arr) {
for (int x = 0; x < arr.length - 1; x++) {
for (int y = 0; y < arr.length - x - 1; y++) { // -x:让每一次比较的元素减少,-1:避免角标越界
if(arr[y] > arr[y+1]) {
int temp = arr[y];
arr[y] = arr[y+1];
arr[y+1] = temp;
}
}
}
}
3.二分查找。
折半查找,可以提高效率,但是必须要保证该数组是有序的数组。
折半查找原理图:
折半查找的第一种形式:
public static int halfSearch(int[] arr, int key) {
int min, max, mid;
min = 0;
max = arr.length - 1;
mid = (max + min) / 2;
while(arr[mid] != key) {
if(key > arr[mid])
min = mid + 1;
else if(key < arr[mid])
max = mid - 1;
if(min > max)
return -1;
mid = (max + min) / 2;
}
return mid;
}
折半查找的第二种形式:
public static int halfSearch_2(int[] arr, int key) {
int min = 0, max = arr.length - 1, mid;
while(min <= max) {
mid = (max + min) >> 1;
if(key > arr[mid])
min = mid + 1;
else if(key < arr[mid])
max = mid - 1;
else
return mid;
}
return -1;
}
举一反三:有一个有序的数组,想要将一个元素插入到该数组中,还要保证该数组是有序的,问如何获取该位置?
原理:如何获取该元素在数组中的位置。使用折半查找。
public static int getIndex(int[] arr, int key) {
int min = 0, max = arr.length - 1, mid;
while(min <= max) {
mid = (max + min) >> 1;
if(key > arr[mid])
min = mid + 1;
else if(key < arr[mid])
max = mid - 1;
else
return mid;
}
return min;
}