C++简单插入排序算法

插入排序把整个待排序序列分成了两个部分,即已排序部分和未排序部分,每次都从未排序部分取第一个元素插入到已排序部分。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
对于一个连续的数组序列,不妨让数组第一个位置的元素为已排序元素,从1开始进行插入排序,用一个变量j指向该需要进行插入排序的元素的位置,用一个变量temp来临时存储需要进行插入排序的元素即[0,j-1]都是已排序元素。

步骤1:从j-1开始从后往前查找合适插入的位置,此时的j位置相当于一个空位置。

步骤2:如果temp < j-1位置元素,就将j-1这个位置的元素移到j这个空位置,并将空位置更新为j-1,即j=j-1

步骤3:重复步骤1,2,直到j到达已排序序列的最前端或找到j-1的位置使得temp > 这个位置的元素,然后将temp插入到j位置。

#include<cstdio>
#include<iostream>
using namespace std;
void insertSort(int array[],int length){
    for(int i = 1;i < length;i++){
        int temp = array[i]; //存储当前需要插入的元素
        int j = i; 
        //从当前需要进行插入排序的这个元素的这个位置开始,每次都将这个元素与j的前一个位置的元素进行比较
        //如果小于它,则将j前一个位置的元素移到j的位置,再把j向前移动一个位置
        //此时j位置相当于一个空位置,就是最终需要进行插入的位置
        while(j>0 && temp < array[j-1]){
            array[j] = array[j-1]; 
            j--;
        }
        array[j] = temp;
    }
}

int main(){
    int array[] = {2,3,4,5,1,65,22};
    int length = sizeof(array)/sizeof(int);
    insertSort(array,length);
    for(int i =0; i< 7;i ++){
        printf("%d ",array[i]);
    }
    printf("\n");
    return 0;
}
posted @   ASjun08  阅读(128)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 终于写完轮子一部分:tcp代理 了,记录一下
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
点击右上角即可分享
微信分享提示