设计思想:如下5个数3 1 4 5 6, 从第i=1个元素开始往前遍历,到6结束每次遍历都使从0到第i-1个元素依次与第i个元素判断,(升序)若比它大,则依次后移,反之则停止把它插入第i个元素。具体程序如下
#include <iostream>
using namespace std;
void sort(int *a, int len)
{
int i, j;
int temp = 0;
for(i=1; i<len; i++)
{
temp = a[i];
for(j=i-1; j>=0; j--)
{
if(a[j]>temp)
a[j+1] = a[j];
else
{
//a[j+1] = temp; 这里可以注释掉
break;
}
}
//注意内循环结束后,判断是否正常退出,若是说明前面一个都没有插入j=-1; 则应是a[i]最小,需插入第一个位置
//if(j<0)相对来说是一种优化,因为无论内循环是否正常退出,j的位置都会确定好
a[j+1] = temp;
}
}
void print_o(int *a, int len)
{
int i;
for(i=0; i<len; i++)
cout << a[i] << " ";
cout << endl;
}
int main()
{
int a[5] = {4,3,3,6,2};
cout << "no sort : ";
print_o(a, 5);
sort(a, 5);
cout << "has sort : ";
print_o(a,5);
}