直接插入排序
核心思想:将所有的待排元素依次和已排元素进行比较,如果待排元素小于某个已排元素(从最小的已排元素开始比较),则将待排元素插入到该已排元素的前面。
图解:
直接插入排序是最简单的插入排序,平均时间复杂度为:O(n2),空间复杂度是O(1)。是一种稳定的排序(比较过程中,相同的元素,位置不会替换)。
算法代码实现:
import java.util.*;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int []data = new int[8];
for(int i= 0;i<data.length ;i++){
data[i] = sc.nextInt();
}
//直接插入排序
data = directInsertionSort(data);
for(int i = 0;i<data.length ;i++){
System.out.print(data[i]+" ");
}
}
//直接插入排序的算法实现
public static int[] directInsertionSort(int[] data){
//第一个元素无比较对象,从第二个开始比较
for(int i = 1;i<data.length;i++){
//比较到第i+1个元素时,依次和他前面i个元素比较大小
//从第一个元素开始(因为第一个最小)
c:for(int j= 0;j<i;j++){
//找到前i个中比他大的第一个元素。
if(data[i]<data[j]){
//依次替换,从第i个元素开始替换,替换到制定位置
for(int p = i;p>j ;p--){
int tmp = data[p];
data[p] = data[p-1];
data[p-1] = tmp;
}
//替换完成之后就结束寻找的循环,对下一个元素进行排序
break c;
}
}
}
return data;
}