您的位置:首页 > 理论基础 > 数据结构算法

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

2017-01-25 21:38 281 查看
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;
这样就会节省很多次交换所花费的时间,试想若对一个完全有序的数组排序,则内层循环均会提前终止,时间复杂度相当低
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  算法 插入排序