直接插入排序
Posted chump
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了直接插入排序相关的知识,希望对你有一定的参考价值。
1、算法思想:将一个记录插入到已经排好序的有序表中,从而得到一个新的、记录数增加1的有序表。
假设待排序的数据是数组A[1….n]。初始时,A[1]自成1个有序区,无序区为A[2….n]。在排序的过程中,依次将A[i] (i=2,3,….,n)从后往前插入到前面已排好序的子数组A[1,…,i-1]中的适当位置,当所有的A[i] 插入完毕,数组A中就包含了已排好序的输出序列。
2、代码实现:
public void sort(int[] list,int size){
for (int i = 1;i<size;i++) {
int temp = list[i]; //要插入的数值
for (int j = 0;j<i;j++){
if (temp<list[j]){
for (int m = i-1;m>=j;m--){
list[m+1] = list[m]; //依次顺移
}
list[j] = temp ;
break; //插入后退出循环(记得已经找到并插入后要退出)
}
}
}
}
3、复杂度分析:1.当要排序的表本身就是有序的,则没有移动记录,时间复杂度为O(N)2.当要排序的表是逆序时,需要比较N+N-1+...+2=(N+2)(N+1)/2次,如果排序记录是随机的,根据概率相同原则,则平均比较和移动次数约为N^2/4次。因此,直接插入排序法的时间复杂度为O(N^2).
以上是关于直接插入排序的主要内容,如果未能解决你的问题,请参考以下文章
直接插入排序 ,折半插入排序 ,简单选择排序, 希尔排序 ,冒泡排序 ,快速排序 ,堆排序 ,归并排序的图示以及代码,十分清楚