//错误总结:
//1:数组越界
//2:处理完循环后,j忘记处理
//3:i只是代表下标,移动的过程中会不断发生变化,所以要用变量进行保存
#include <iostream>
#include<cstdio>
using namespace std;
//下标从0开始来一遍
void insert_sort1(int a[], int n)
{
for (int p = 1; p< n; p++)
{
int temp= a[p],i=p;
while (i>0&&a[i-1]>temp)//从后往前面比较
{
a[i] = a[i - 1];
i--;
}
a[i] = temp;
}
}
//插入排序
void insert_sort(int a[], int n)
{
//第一项已经默认排好序了,从第二项开始进行插入
for (int i = 2; i <= n; i++)
{
//记录当前的i值,看插在哪个位置合适
int temp = a[i], j = i - 1;//j用来和a[i]进行比较,看插在哪里?
//a[i]的值会进行改变
while (a[j] >temp && j >= 1)//如果啊a[j]的值比a[i]的值大的话,往后面移动,并且要限定j的值
{
a[j + 1] = a[j];
j--;//后序的处理不要忘了
//检查边界是否满足条件?j值可不可以等于1?可以的,并且是必须的,因为要处理最前面的一项
}
//当循环结束的时候,就是a[j]的值不满足条件,那么a[i]应该插入到下一项
//此时的a[i]已经改变了值,为什么用temp进行储存
a[j + 1] = temp;
}
}
int main()
{
int a[4];
//下标从1开始,数组要多开1个
for (int i = 0; i <= 3; i++)
{
cin >> a[i];
}
/*for (int i = 2; i <= 12; i++)
{
int temp = a[i], j = i;
//这里用的[j-1]所以j>1,不取等号
while (j > 1 && temp < a[j-1])
{
a[j] = a[j-1];
j--;
}
a[j] = temp;
} */
insert_sort1(a, 4);
for (int i = 0; i <= 3; i++)
{
cout << a[i] << endl;
}
return 0;
}
07-24
57万+
![](https://csdnimg.cn/release/blogv2/dist/pc/img/readCountWhite.png)
09-05
1984
![](https://csdnimg.cn/release/blogv2/dist/pc/img/readCountWhite.png)
04-29
“相关推荐”对你有帮助么?
-
非常没帮助
-
没帮助
-
一般
-
有帮助
-
非常有帮助
提交