您的位置:首页 > 其它

排序算法—比较排序之插入排序及其优化

2018-02-16 12:36 295 查看
插入排序:能够提前终止,在处理近乎有序的元素时,性能很好,在近乎有序的元素中是近乎O(n)的排序算法;
在确实每个元素的位置之前,该元素前面的所有元素都是有序的,将现在需要确认位置的元素插入当前面有序的队列中,通过移动实现,插入排序的原理是访问过的部分是有序的。
基本实现:
//将当前处理的数据插入到有序表中 得到一个新的 数据加一的有序表
void insert_sort(int* a,int n) {
for (int i = 1; i < n; i++) {//默认只有一个数据的表是有序的 则从下标1的数据开始插入到前面的有序表中
for (int j = i; j >=0&& a[j] < a[j-1]; j--) {//将数据插入到有序表中
_swap(&a[j], &a[j - 1]); 
}
}

}
优化一:使用赋值操作代替交换操作
//插入排序优化1 只在内层循环交换一次数据 其他都为赋值操作
void insert_sort1(int* a, int n) {
for (int i = 1; i < n; i++) {//默认只有一个数据的表是有序的 则从下标1的数据开始插入到前面的有序表中
int target = a[i];//记录当前需要往前插入的数据
int j = i ;
while (j > 0 && target < a[j - 1]) {
a[j] = a[j - 1];//将大于要插入的数据的值往后移移位 空出应该插入的位置
j--;
}
a[j] = target;
}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐