插入排序法是将数组中的元素,逐一与已排序好的数据进行比较,前两个元素先排好,再将第三个元素插入适当的位置,所以这三个元素仍然是已排序好的,接着再将第四个元素加入,重复此步骤,直到排序完成为止。可以看作是一串有序的记录R1,R2,R3…Ri中插入新的记录Ri+1,使得i+1个记录排序妥当。
1.最坏和平均情况需比较n(n-1)/2次;时间复杂度为O(n^2),最好情况的时间复杂度为O(n)。
2.插入排序是稳定排序法。
3.只需一个额外的空间,所以空间复杂度为最佳。
4.此排序法适用于大部分数据已经过排序或已排序数据库新增数据后进行排序的情况。
5.插入排序法会造成数据的大量搬移,所以建议在链表上使用。
package Sort;
import java.io.*;
//设计一个插入排序法,自行输入6个数据,并进行插入排序。
public class InsertingSort {
public static void main(String[] args) throws IOException {
// TODO Auto-generated method stub
int data[]=new int[6];
int size=6;
int j;//定位比较的元素
int temp;//暂存数据
for(int i=0;i<size;i++) {//输入数组数据
System.out.print("请输入第"+(i+1)+"个元素:");
InputStreamReader isr=new InputStreamReader(System.in);
BufferedReader br=new BufferedReader(isr);
data[i]=Integer.parseInt(br.readLine());
}
for(int i=1;i<size;i++) {
j=i-1;
temp=data[i];
while(j>=0&&temp<data[j]) {//如果第二个元素小于第一个元素
data[j+1]=data[j];//就把所有元素往后推一个位置
j--;
}
data[j+1]=temp;//最小的元素放到第一个元素
}
for(int i=0;i<size;i++) {//打印数组数据
System.out.print(data[i]+" ");
}
}
}