插入排序算法
插入排序算法是一种简单且有效的比较排序算法。在每次迭代过程中算法随机地从输入序列中移除一个元素,并将该元素插入待排序序列的正确位置。重复该过程,直到所有输入元素都被选择一次。优点是实现简单,数据量较少的时候效率高,稳定性,原地排序。
原始序列:6 8 1 4 5 3 7 2,升序排列
第一趟: 6 8 1 4 5 3 7 2,考虑索引位置0
第二趟: 6 81 4 5 3 7 2,考虑索引位置0~1
第三题: 1 6 8 4 5 3 7 2,考虑索引位置0~2,在6和8之前插入1
第四趟: 1 4 6 8 5 3 7 2,重复以上过程直到序列被排序完成
第五趟: 1 4 5 6 8 3 7 2,
第六趟: 1 3 4 5 6 8 7 2,
第七趟: 1 3 4 5 6 7 82,
第八趟: 1 2 3 4 5 6 7 8,
void InsertionSort(int A[] int n ){
int i,j v;
for(int i=1;i<n;i++){
v=A[i];
j=i;
while(A[j-1]>v&&j>=1){
A[j]=A[j-1];
j--;
}
A[j]=v;
}
}
package paixu; import java.util.*; /** * Created by Administrator on 2017/9/29. */ public class ChaRupai { public static void InsterSort(int[] a){ if(a!=null){ for(int i=1;i<a.length;i++){ int temp=a[i],j=i; if(a[j-1]>temp){ while(j>=1&&a[j-1]>temp){ a[j]=a[j-1]; j--; } } a[j]=temp; } } } public static void main(String[] args){ int[] a={7,3,19,40,4,7,1}; InsterSort(a); for(int i=0;i<a.length;i++){ System.out.print(a[i]+" "); } } }
性能:
最坏情况下时间复杂度:O(N*N)
最好情况下时间复杂度:O(N*N)
平均情况下时间复杂度:O(N*N)
最坏情况下空间复杂度:O(N*N) O(1)辅助