package basic_01;
/*
* 冒泡算法:稳定,时间:n^2,相邻两个数值进行比较。end边界逐渐减小,先确定end外层循环的变化形式,再确定内层循环比较的变化形式,
* 简单选择排序算法:不稳定,时间:n^2,相邻两个数值进行比较。左侧边界逐渐增大。
* 插入排序算法:稳定,时间:n^2,每步将一个待排序的记录,按其顺序码大小插入到前面已经排序的字序列的合适位置,直到全部插入排序完为止。
*
*
* */
public class Code_00_Bubble_select_insert {
public static void main(String[] args) {
int[] arr = { 15, 27, 36, 59, 42, 8 };
bubbleSort(arr);
printarr(arr);
}
public static void bubbleSort(int[] arr) {
if (arr == null || arr.length < 2) {
return;
} // 刨除特殊情况
for (int end = arr.length - 1; end > 0; end--) {
for (int i = 0; i < end; i++) {
if (arr[i] > arr[i + 1]) {
swap(arr, i, i + 1);
}
}
} // 注意i的边界条件,i应该截止到end的左侧
}
public static void selectSort(int[] arr) {
if (arr == null || arr.length < 2) {
return;
} // 刨除特殊情况
for (int i = 0; i < arr.length - 1; i++) {
int less = i;//定义一个变量用来存放最小值
for (int j = i + 1; j < arr.length; j++) {
less = arr[i] > arr[j] ? j : i;
}
swap(arr, less, i);
}
}//注意j的开始条件,应该是i右侧的值
public static void insertSort(int[] arr) {
if (arr == null || arr.length < 2) {
return;
} // 刨除特殊情况
for (int i = 1; i < arr.length; i++) {
for (int j = i - 1; j >= 0; j--) {
if (arr[j] > arr[j + 1]) {
swap(arr, j, j + 1);
}
}
}
}// 内层循环:类似与插牌,不断的将第j个数据与前j个数据进行比较,排好序;不断向前推进
public static void swap(int[] arr, int i, int j) {
int temp = arr[i];
arr[i] = arr[j];
arr[j] = temp;
}
public static void printarr(int[] arr) {
for (int i = 0; i < arr.length; i++) {
System.out.print(arr[i] + "\t");
}
}
}
网友评论