//插入排序的变形.cpp
/////////////////////////////////////////////////////////////////////////
// 插入排序通过把数组中的各元素插入到适当的位置来进行排序。其步骤为:
//
// (1)设数组中的头一个元素已经按顺序排好,现将第二个元素插入到已排好序
// 的头一个元素当中去(适当位置),得到两个已排好序的元素;
//
// (2)将第三个元素插入到前面已排好序的两个元素的适当位置,得到三个已排
// 好序的元素;
//
// (3)依次进行下去,直到将最后一个元素插入到前面已经排好序的n-1个元素
// 的适当位置中去。
/////////////////////////////////////////////////////////////////////////
#include"iostream.h"
void main(void)
{
int a[]={10,5,3,7,6,9,4,8,2,1};//最好和最坏情况都需要9轮
int size=sizeof(a)/sizeof(int);//元素个数
cout<<"排序前的各元素:/n";
for(int i=0;i<size;i++) //按原始顺序输出个元素值
cout<<a[i]<<",";
cout<<endl<<endl;
cout<<"正在插入排序:/n";
int inserter,index;//inserter待插入合适位置的元素,index指示插入位置
for(int pass=1;pass<size;pass++){ //共比较size-1轮
inserter=a[pass];//第pass轮时,待插入的对象是a[pass]
index=pass-1;
while(index>=0&&inserter<a[index]){ //寻找插入位置
a[index+1]=a[index]; //a[index]后移一位,腾出空位
index--; //指针前移,再比较
}
a[index+1]=inserter;//跳出while时,找到插入位置
//以下输出经此轮排序后的结果
for(int i=0;i<size;i++){
cout<<a[i]<<",";
if(i==pass) cout<<"|";//已排序和未排序元素间的分界线
}
cout<<endl<<endl;
}//end of for
cout<<"after insert:/n";
for(i=0;i<size;i++) //排序后数组array的各元素值有改变!
cout<<a[i]<<",";
cout<<endl;
}