排序算法—插入排序

来源:互联网 发布:域名注册证书生成器 编辑:程序博客网 时间:2024/04/30 10:21
/******************************** *插入排序:最坏情况下,输入数组逆序,时间复杂度O(n^2) * * 最好情况下,输入数组正序,时间复杂度O(n) * *由于插入排序在输入数组正序的情况下时间复杂度较小因此 *当数组比较小且基本有序的情况下我们可以使用插入排序 *应用:优化排序,可以在快速排序的过程结合插入排序提高效率 * *此外:在内层循环中,如果我们采用二分查找,效率是否会更高 * 呢?同时又会出现什么问题呢?(提示:该怎么把数组元素整体后移) * ******************************/void Insert_Sort(int *ary, int n)//插入排序,数组下标从0开始{int i, j, tmp;for(i = 1; i <= n - 1; ++i) //当前正在插入下标为i的元素,其中0~i-1元素已经是有序的{tmp = ary[i];for(j = i - 1; j >= 0; --j)//寻找插入的位置,从后向前遍历(1、便于数组元素的向后移动;2、保证插入排序的稳定性){if(ary[j] > tmp)ary[j+1] = ary[j];else break;///注意1}if(j == -1) ///注意2:如果当前要插入的元素比已经有序的数组中的所有元素都小时,j = -1,对此要进行处理j = 0;ary[j] = tmp;}return;}

0 0
原创粉丝点击