插入排序

//插入排序的变形.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;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值