算法练手,回顾了一下排序,在写的过程中慢慢熟悉思路
1 拟建需要处理的对象
2 设计输出对象的方法
3 设计处理对象的方法
3.1 处理对象的边界问题
3.2 从大循环开始抽象
/**
* @ClassName sort
* @Author CabbageDevil
* @Version 1.0
**/
public class sort {
//交换方法
public static void swap(int[] arr, int i, int j) {
int tmp = arr[j];
arr[j] = arr[i];
arr[i] = tmp;
}
//插入排序
public static void insert(int[] arr) {
//定义边界
if (arr == null || arr.length < 2) {
return;
}
// 0 ~ 0 有序
// 0 ~ 1
// 0 ~ 2
// 0 ~ 3
// 0 ~ i
int n = arr.length;
for (int end = 1; end < n; end++) {
int newNumIndex = end;
//判断index-1还有数 并且 是否需要index左移
while (newNumIndex - 1 >= 0 && arr[newNumIndex] < arr[newNumIndex - 1]) {
//交换
swap(arr, newNumIndex, newNumIndex - 1);
//最小数index左移,所以index需要-1
newNumIndex--;
}
}
}
//冒泡排序
public static void bubble(int[] arr) {
//定义边界
if (arr == null || arr.length < 2) {
return;
}
//0——n-1
//0——n-2
//0——n-i
int n = arr.length;
for (int end = n - 1; end >= 0; end--) {
//判断某一位大小并且交换
for (int second = 1; second < end; second++) {
if (arr[second] < arr[second -1]) {
//交换
swap(arr, second, second - 1);
}
}
}
}
//选择排序
public static void select(int[] arr) {
//定义边界
if (arr == null || arr.length < 2) {
return;
}
//0——n-1
//1——n-1
//2——n-1
//i——n-1
int n = arr.length;
//左侧范围
for (int i = 0; i < n; i++) {
int minValueIndex = i;
//找到最小值下标
for (int j = i + 1; j < n; j++) {
minValueIndex = arr[j] < arr[minValueIndex] ? j : minValueIndex;
}
//交换
swap(arr, minValueIndex, i);
}
}
public static void printArray(int[] arr) {
for (int i = 0; i < arr.length; i++) {
System.out.print(arr[i] + " ");
}
System.out.println();
}
public static void main(String[] args) {
int[] arr = {5, 66, 88, 4, 2, 13, 6, 9, 1, 3, 4, 6, 1, 2, 5, 1};
printArray(arr);
// select(arr);
// bubble(arr);
insert(arr);
printArray(arr);
}
}