什么是插入排序呢?
插入排序就像玩纸牌,一个元素一个元素的来,把当前的这各元素插入到已经排序好的数组中的合适的位置,但插入元素的位置后的所有元素都需向后移动一位。
与选择排序的异同:
选择排序是相邻的元素两两比较,比较完后再进行交换,插入排序是从第二个数开始,依次往后移动一个元素的位置,并且与该位置之前的元素依次比较直至找到属于自己的位置
算法步骤
将第一待排序序列第一个元素看做一个有序序列,把第二个元素到最后一个元素当成是未排序序列。
从头到尾依次扫描未排序序列,将扫描到的每个元素插入有序序列的适当位置。(如果待插入的元素与有序序列中的某个元素相等,则将待插入元素插入到相等元素的后面。
动图演示:
代码演示:
import java.util.Arrays;
public class 插入排序 {
public static int[] sort(int[] arr) {
if(arr == null || arr.length<2)
return arr;
int[] arr1 = Arrays.copyOf(arr, arr.length);
for(int i=1;i<arr1.length;i++) {
int tmp = arr1[i];
int j=i;
for(;j>0 && tmp<arr1[j-1];j--) {
arr1[j] = arr1[j-1];
}
if(j != i) {
arr1[j] = tmp;
}
}
return arr1;
}
/*//简单代码演示
public static void insertsort(int[] data) {
for (int i = 1; i < data.length; i++) {
for (int j = i; j > 0; j--) {
if (data[j] < data[j - 1]) {
int temp = data[j];
data[j] = data[j - 1];
data[j - 1] = temp;
}
}
}
System.out.println(Arrays.toString(data));
}
*/
public static void main(String[] args) {
int[] arr = {9,5,6,48,32,2,8,6,11};
int[] sort = sort(arr);
System.out.println(Arrays.toString(sort));
}
}