• 排序系列算法——插入排序


    1. 原理

    插入排序是基本的排序算法之一,其基本原理是将无序的元素不断插入到已排序的序列中,直到所有的元素已全部插入为止。如下图所示:

     

    刚开始,已排序的序列是空的,一步一步从未排序的序列中将数据插入到已排序的序列中,已排序的序列长度不断增加,为排序的序列长度不断减小,最终完成全序列排序时,未排序的序列为空。第一次插入,序列中没有元素,直接插入即可;第二次插入,序列中只有一个元素,跟该元素进行对比,确定将插入元素的位置;第三次插入,序列中有两个元素,跟这两个元素对比,确定插入的位置;...直到所有的元素都已经插入为止。

    2.排序过程及算法设计

    排序过程

    以一个实际的例子为例:

    设有序列{7,9,6,12,15,11},使用插入排序对上述的序列按从小到大进行排序,排序的过程可描述如下:

     

    算法设计

    插入排序是将元素插入已排序序列的过程,排序过程需要将元素与已排序的序列元素进行对比,采用从后往前的对比顺序,不断向前移动,直到不能向前移动为止,此时的位置就是要插入元素所属的位置。如对元素6进行插入排序,排序的过程如下图所示:

     

    其余所有元素的排序过程与上述过程类似。

    3. C++源码

     1 #include "stdafx.h"
     2 
     3 #include <iostream>
     4 
     5 using namespace std;
     6 
     7 void insection_Sort(int *values,int length){
     8 
     9     for(int i=0;i<length;i++){
    10 
    11         int currentValue = *(values+i);     //currentValue表示要插入元素的值
    12 
    13         int index=i-1;                                //index表示要与插入元素currentValue对比的元素的下标
    14 
    15         while(currentValue<*(values+index)&&index>=0){
    16 
    17            *(values+index+1)=*(values+index);        //若当前位置的元素比插入元素要大,将当前元素向后移一位
    18 
    19             index--;
    20 
    21         }
    22 
    23         *(values+index+1)=currentValue;        //此时index表示插入元素的下表,对该位置复制currentValue
    24 
    25     }
    26 
    27 }
  • 相关阅读:
    23种设计模式彩图
    Win10间歇性卡顿
    RDMA
    mii-tool与ethtool的用法详解
    linux下模拟CPU占用100%小程序
    Linux SNMP 监控一些常用OID
    SNMP协议介绍
    set排序(个人模版)
    TSP(个人模版)
    树的重心(个人模版)
  • 原文地址:https://www.cnblogs.com/yonghao/p/5059395.html
Copyright © 2020-2023  润新知