#include <iostream>
#include <algorithm>
using namespace std;
void insert(int a[], int len)
{
/*
1.从第二个开始,把第二个抽出来当临时变量,这时假设这个位置是空的
2.当左边的数据比这个临时变量大时,将左边的数值向右移动,
直到遇到左边,直到左边的数据小于这个临时变量为止
3.将这个临时变量插入到这个空位置上
排序数组:5 7 4 2 6
第一次
temp = 7
5 0 4 2 6--》左边的比这个临时变量小,且已经到达了最左端
5 7 4 2 6(结束)
第二次
temp = 4
5 7 0 2 6
5 5 7 2 6
5 5 7 2 6
4 5 7 2 6 (结束)
第三次
temp = 2
4 5 7 7 6
4 5 5 7 6
4 4 5 7 6
2 4 5 7 6 (结束)
第四次
temp = 6
2 4 5 7 7
2 4 5 6 7 (结束) 因为左边的5比6小,所以就停止将左边的数据右移了,将临时变量插入到这里
*/
for (int i=1; i<len; i++)
{
cout<<"第"<<i<<"次排序:"<<endl;
int temp = a[i]; //定义临时变量
cout<<"temp = "<<temp<<endl;
int j;
//当 (j>0) 遇到最左端时,或者,(a[j-1] > temp) 左边的数据比这个临时变量小时,停止
for (j=i; j>0&&a[j-1]>temp; j--)
{
a[j] = a[j-1];//将左边的数值向右移到右边
//循环输出,看看排序经过
for (int y=0; y<len; y++)
{
cout<<a[y]<<" ";
}
cout<<endl;
}
cout<<"要插入的位置 j = "<<j<<endl;
cout<<"要插入的位置上的值 a[j] = "<<a[j]<<endl;
a[j] = temp; //将这个临时变量插入到这个空位上
//循环输出,看看排序经过
cout<<"第"<<i<<"次排序后的结果:"<<endl;
for (int k=0; k<len; k++)
{
cout<<a[k]<<" ";
}
cout<<endl<<endl;
}
}
void show(int a[], int len)
{
for (int i=0; i<len; i++)
{
cout<<a[i]<<" ";
}
cout<<endl;
}
int main()
{
int a[5] = {5,7,4,2,6};
cout<<"插入排序:"<<endl;
cout<<"排序前:"<<endl;
show(a, 5);
cout<<endl;
insert(a, 5);
cout<<endl;
cout<<"排序后:"<<endl;
show(a, 5);
return 0;
}
插入排序
最新推荐文章于 2024-12-13 15:13:27 发布