标签:直接 temp 前面 一个 插入排序 元素 其前 插入 排序
直接插入排序原理很简单
前提:
一个随机序列。
思路:
从第二个元素开始,每个等待插入元素都要和前面的元素比较。
比较的结果分为两种
①若这个元素大于其前一个元素: 则位置保持不变。
②这个元素小于前一个元素: 则继续往前找其前前一个元素。
同时要比较该元素和前前个元素的大小。
同样,如果大于则插入在其前前一个元素的后面。
若小于,则继续往前找。
直到 找到一个比带插入元素小的,然后插入到哪个元素后面。
然后接着对将后一个元素作为待插入元素,和前面的元素进行比较,直到遍历完这个列表。
注意:
- 若这个表本来就是有序递增的,那其实每个元素只需要和他前面的一个元素进行比较就行了,最好的时间复杂度为O(n)。
- 若这个表中元素顺序是逆序,比如我们想要丛小到大,但是这个表的顺序刚好是丛大到小,那就是最坏的情况,时间复杂度为O(n^2)。
//不使用哨兵的代码
void InsertSort(vector<int> A, int n){
int i, j, temp;
for (i = 1; i < n; i++){
if(A[i]<A[i-1]){//若第i个元素小于第i-1个元素
temp = A[i];//先把第i个元素的值保存下来,因为接下来要将前面的元素往后移动一个单位,会覆盖第i个元素
for(j = i - 1; i >= 0 && A[j] > temp; j--)
A[i+1] = A[j];
//如果前面的元素还是比第i个元素大,那就继续往前比j--,
//直到有一个元素小于等于第i个元素(现在已经保存在temp中了)
A[j+1] = temp;//将第i个元素插入相应位置
}
}
}
标签:直接,temp,前面,一个,插入排序,元素,其前,插入,排序 来源: https://blog.csdn.net/qq_43591406/article/details/121590771
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。