冒泡算法
public static void bubbleSort(int[] a) {
for(int i = 0; i < a.length - 1; i++){//控制冒泡的总次数
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记录当前最小值的下标(可能变化)
// 从k+1位置开始向右比较,寻找最小值的下标
for(int j = k + 1; j < a.length; j++){
if(a[j] < a[k]){
k = j; //k记录目前找到的最小值所在的位置
}
}
//完成上面循环后,k记录了当前轮最小值的下标
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++) {//新数的位置
for (int j = i; j > 0; j--) {//与左边的依次比较
if (a[j] < a[j - 1]) {//顺序需要调整则交换
int temp = a[j];
a[j] = a[j - 1];
a[j - 1] = temp;
} else {
break;//提高效率,左边都是有序的,
//新数据如果无需交换,则可以直接放入有序数列尾部
}
}
}
}
顺序查找
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; // 起点
int upper = a.length - 1; // 终点
while (low <= upper) {//避免出现下标越界异常
int mid = (low + upper) / 2; // 中间点
if (a[mid] < num) { // 中间点的值小于要查找的值
low = mid + 1; // 更改查找的起点为中间点位置后一位
} else if (a[mid] > num) { // 中间点的值大于要查找的值
upper = mid - 1; // 更改查找的终点为中间点位置前一位
} else { // 中间点的值等于要查找的值
return mid; // 返回该位置
}
}
return -1;
}
网友评论