插入排序(c++)

插入排序就是按顺序一个接一个的拿出一个数组里顺序不对的元素,然后把他放到正确的位置,我们可以用一个指针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;
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值