插入排序就是按顺序一个接一个的拿出一个数组里顺序不对的元素,然后把他放到正确的位置,我们可以用一个指针i来扫描数组a,如果a[i]<a[i-1]的话是正确的顺序,我们跳过,如果a[i]>a[i-1]说明a[i-1]是异常的元素(比前面的数小,我们要的顺序应该是递增的顺序),然后我们就把这个元素的值和下标拿出来,另x等于他的值,idx等于他的下标,用指针j来从异常的元素的下标idx来往他前面找,如果找到比x小的数就让他的下一个位置等于x,如果他比x大的话我们就让他后面那个数等于他(把大的数往后移动)。
#include <iostream>
using namespace std;
int main() {
int n;
int a[100];
cin>>n;
int idx,x;
for(int i=0;i<n;i++){
cin>>a[i];
}
for (int i = 0; i < n-1; i++) {//因为比i和i+1所以i要小于n-1
if (a[i] < a[i + 1]) continue; // 如果是正常的顺序,跳过
else { // 否则进行插入排序
idx = i + 1; // 存储异常元素位置
x = a[i + 1]; // 存储异常元素的值
for (int j = idx ; j >= 0; j--) { // 从异常元素的位置往前查找
if(j==0)a[j]=x;//如果走到了首个元素就把异常的数赋给首个元素(异常元素最小
else{
if (x > a[j - 1]) { //如果发现前一个元素,比异常元素小,那就是插入的位置,插入元素
a[j] = x;
break;
} else { // 否则将大的元素往后移动
a[j] = a[j - 1];
}
}
}
}
}
for(int i=0;i<n;i++)printf("%d ",a[i]);
return 0;
}