算法与数据结构--插入排序(InsertSort)

来源:互联网 发布:电子教室软件哪个好 编辑:程序博客网 时间:2024/06/10 21:28
1.算法思想:从数组的第二个元素开始依次与前面的前面的元素进行比较,若比前一个元素小,则交换位置。直到不小于前一个元素为止。

2.算法实现:


for(int i = 1; i++ ;i <n)  for(int j = i; j > 0 && arr[j] < arr[j-1] ;j--)    swap(arr[j],arr[j-1])

3.要点:插入排序在最差的情况下时间复杂度是n2,可内层循环可提前结束,因为对于基本有序的数组进行排序的话,插入排序的效果还是挺好的。

4.改进:改进思想,一次swap交换是三次赋值,如果在比较的过程中只把当前比较的数值拷贝一个副本,而不着急交换的话会节省大量的时间,代码如下

for(int i = 1;i < n;i++)    T e = arr[i];    int j; //j保存元素e应该插入的位置    for(j = i;j > 0 && arr[j-1] > e;j--)        arr[j] = arr[j-1];   arr[j] = e;
这样就会节省很多次交换所花费的时间,试想若对一个完全有序的数组排序,则内层循环均会提前终止,时间复杂度相当低


0 0
原创粉丝点击