数据结构与算法——直接插入排序


算法描述:

       直接插入排序算法:插入表示将一个新的数据插入到一个已经排好序的有序数表中,并继续保持有序。例如有一个长度为n的无序数组,进行n-1次的插入就能完成排序。第一次,数组第1个数认为是有序的数组,将数组第2个元素插入仅有1个有序的数组中。第2次,数组前两个元素组成有序的数组,将数组第3个元素插入由两个元素构成的有序数组中......。第n-1次,数组前n-1个元素组成有序的数组,将数组的第n个元素插入由n-1个元素构成的有序数组中,则完成了整个插入排序。

代码实现:

 1 public class InsertSort {
 2     public void insertSort(int[] arr) {
 3         if(arr==null || arr.length==1) {
 4             return;
 5         }
 6         int len=arr.length;
 7         for(int i=1;i<len;i++) {
 8             int j;
 9             int temp=arr[i];
10             for(j=i-1;j>=0 && arr[j]>temp;j--) { 
11                 arr[j+1]=arr[j];
12             }
13             arr[j+1]=temp;
14         }
15     }
16 }

直接插入排序算法的时间复杂度分析

       插入排序算法的时间复杂度就是比较的次数,而比较的次数与待排数组的初始顺序有关,当待排数组有序(顺序)时,没有移动操作,此时该算法的时间复杂度为O(n)。当待排数组是逆序时,比较次数达到最大(最坏的情况),此时该算法的时间复杂度为O(n2)。

      算法的空间复杂度:O(1)

      算法的稳定性:直接插入排序算法是稳定的(数组中有相同的元素时,排序后并不替换位置)

      直接插入排序算法比冒泡和简单选择排序算法的性能要好一些


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM