插入排序分为两部分:
(一)待排序的部分;
(二)已排序的部分。
若待排序的部分都储存在数组中,默认数组中的第一个数是已经排好的部分,所以从第二个数开始排序。
基本思想:从待排序的部分中,从第一个开始取,与排好序的部分中的最后一个数进行比较。若待排序的数比较小,则将比较的数据向后移动一位;若待排序的数比较大,则将待排序的数据插入已排序的部分。
源程序如下:
普通版:
#include<stdio.h>
#include<iostream>
using namespace std;
//插入排序,从小到大
int main()
{
int num[10]={1,4,9,5,6,4,3,7,0,45};//待排序的整数数组
int key;
for(int i=1;i<10;i++)//比较n-1轮
{
key=num[i];//记录待比较的数据
int j=i-1;
while(j>=0&&num[j]>key)
{
num[j+1]=num[j];
num[j]=key;
j--;
}
}
for(int i=0;i<10;i++)
cout<<num[i]<<endl;
return 0;
}
升级版:
#include "stdafx.h"
#include<stdio.h>
#include<string>
#include<iostream>
using namespace std;
//插入排序,从小到大
void sorting(int num[],int n)
{
int key;
for(int i=1;i<n;i++)//比较n-1轮
{
key=num[i];//记录待比较的数据
int j=i-1;
while(j>=0&&num[j]>key)
{
num[j+1]=num[j];
num[j]=key;
j--;
}
}
}
int main()
{
int num[10]={0,5,1,9,3,2,7,8,6,4};//待排序的整数数组
sorting(num,10);
for(int i=0;i<10;i++)
cout<<num[i]<<endl;
return 0;
}