C++插入排序

引言

插入排序就是将一个序列中第一个元素,认为是有序数组,该数组含一个元素,剩下的元素构成一个无序数组,将无序数组中元素逐一与有序数组中最后一个元素开始向前比较,根据具体的从大到小的顺序或者从小到大的顺序,若元素需按从小到大的顺序排列,则当无序数组中的元素小于有序组数中元素时,将有序数组该元素往后移动一位,无序数组中该元素赋值到该有序数组的位置上,按此方法有序数组中元素的值再增加,无序数组中元素的值减少。
如例:3,1,6,2按从小到大排序。实现插入排序时,将第一个元素3作为有序数组,其余元素1,6,2作为无序数组,用无序数组中的第一个元素1与有序数组中的最后一个元素3比较,1<3,将3后移一位,1放到3原来的位置上,有序数组变为1,3,无序数组为6,2,将无序数组中的元素6与有序数组从最后一位开始向前比较,6>3,不用移动位置,由于按照从小到大的顺序排列,此时不需再与有序数组中元素向前比较,此时有序数组:1,3,6,无序数组只有一个元素2,将无序数组中元素2与有序数组1,3,6从最后一位向前比较,遇到比2小的元素,则停止本轮比较,2<6,将6向后移动一位,2赋值给6之前所在的位置,用2与3比较,2<3,将3往后移动一位,将2赋值给3之前所在的位置,接着用2与1比较,2>1,不需要做任何操作,此时无序数组已经逐一比较结束,有序数组为,1,2,3,6。

示例

基于vs2010的控制台应用程序,下面是代码:
insertSort.cpp

// insertSort.cpp : 定义控制台应用程序的入口点。
//

#include "stdafx.h"
#include 
#include 

using namespace std;

/************************************************************************/
/* 功能:插入排序 (从小到大) 2,5,3,6,1
   功能函数:
   void insertSort(int *parr,int n)  插入排序
   void printParr(int *parr,int n)  输出数组元素*/
/************************************************************************/

void insertSort(int *parr,int n)
{
    for(int i = 1; i< n; ++i)
    {
        int temp = parr[i];//采用中间变量temp,否则会覆盖
        for( int j = i-1;j >= 0; --j)
        {
            if(temp < parr[j])
            {
                parr[j +1] = parr[j];//后移
                parr[j] = temp;
            }
            else
            {
                break;
            }
        }
    }
}


void printParr(int *parr,int n)
{
    for(int i = 0; i < n; ++i)
    {
        cout<<parr[i]<<"\t";
    }
}

int _tmain(int argc, _TCHAR* argv[])
{
	int arr[] = {2,5,3,6,1};
    printParr(arr,5);
    cout<<endl;
    insertSort(arr,5);
    printParr(arr,5);
    cout<<endl;

    system("pause");
    return 0;
}

程序的结构如下:
C++插入排序_第1张图片

运行效果

C++插入排序_第2张图片

你可能感兴趣的:(C++,插入排序)