插入排序基础:
算法思想:
- 从第一个元素开始,该元素可以认为已经被排序
- 取出下一个元素,
在已经排序的元素序列中从后向前扫描
- 将取出的元素和前面已排序的数从后向前进行依次比较,如果取出的值比已排序的值小就交换,直到不能交换为止
public class insertSort {
public static void insertSort(int[] arr){
//如果数组为空或者长度为1,那么就不用排序了
if(arr ==null||arr.length<2) {
return;
}
//0~0位置已经有序,无须比较
//0~1,0~2,0~3 .。。。。0~n-1要进行比较
int N = arr.length;
for (int end = 1; end <=N-1 ; end++) {
//假设当前位置的索引为一开始在的位置
int nowNumIndex=end;
//nowNumIndex-1>=0表示当前位置左边要有值,没值还比啥呀!
while(nowNumIndex-1>=0&&arr[nowNumIndex-1]>arr[nowNumIndex]){
swap(arr, nowNumIndex-1, nowNumIndex);
nowNumIndex--;
}
}
}
//值的交换
public static void swap(int[] arr,int i, int j){
int temp=arr[j];
arr[j]=arr[i];
arr[i]=temp;
}
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 = {6,4,45,23,4,6,1,2,4,3,2,7,8,4};
printArray(arr);
insertSort(arr);
printArray(arr);
}
}
适用场景
待排序序列的元素个数不多(<=50),且元素基本有序。