基础排序算法
- 选择排序
**核心思想**:在【没有排序】的数组里面找到【最小值】的位置,移动到最左
/**
* 选择排序
*/
public static void selectionSort(int[] arr){
if (null==arr||arr.length<2){
return;
}
//长度
int len = arr.length;
for (int i = 0; i < len; i++) {
//假设最小值位置就是在第一个位置0
int minValueIndex = i;
//找到最小值的位置
for (int j = i+1; j < len; j++) {
//比较 j 位置的值 和 i 位置的值 那个大。
//如果 j 值小于 i,那么位置就等于 j(j的值再二次寻循环中一直在变化) ,反之 则最小值的位置就是 minValueIndex ;
// 既然 j = i+1 那么为什么不直接使用 i+1 是使用 j 呢?
// i的值 在一层循环中变化。
// j的值 在二层循环中变化。
minValueIndex = arr[j]<arr[i] ? j:minValueIndex;
}
swap(arr,i,minValueIndex);//交换
}
}
插入排序
**核心思想**:在【没有排序】的数组中,拿到数值,与前面【已经排序】的数组中比较找到合适的位置进行交换。
/**
* 插入排序
*/
public static void insertSort(int[] arr){
// 数组小于2 不需要排序
if (null==arr||arr.length<2){
return;
}
int len = arr.length;
for (int i = 1; i < len; i++) {
// 0 的位置 pre = i -1
// 1 的位置 pre + 1
for (int pre = i-1;pre>=0 && arr[pre]>arr[pre+1];pre--){
swap(arr,pre,pre+1);
}
}
}
交换函数
/**
* 选择排序 值交换
* @param arr 源数据
*/
public static void swap(int[] arr,int i ,int j){
int temp = arr[i];
arr[i] = arr[j];
arr[j] = temp;
}