/*
直接插入排序:
待排序的元素放在数组R[0...n-1]中,排序过程中的某个时刻,R被划分成两个子区间R[0...i-1]和R[i...n-1],
其中前一个区间是已经排好序的有序区,后一个区间是当前未排好序的区间,即无序区。
直接插入排序的一趟操作是将当前无序区的开头元素R[i]插入到有序区的位置里,使R[0...i]变为新的有序区。
增量法。
*/
#include <iostream>
using namespace std;
void InsertSort(int R[],int n)
{
int i,j;
int tmp;
for(i=1; i<n; i++)
{
tmp=R[i]; //从右向左查找是因为R[i]被保存到tmp中,被覆盖后依然有记录
j=i-1; //从右向左在有序区R[0...i-1]中查找R[i]的位置
while(j>=0&&tmp<R[j])
{
R[j+1]=R[j]; //将关键字大于R[i].key的元素后移
j--;
}
R[j+1]=tmp; //在j+1处插入R[i]
for(int c=0; c<n; c++)
cout<<R[c]<<" ";
cout<<endl;
}
}
int main()
{
int D[10]= {10,9,8,7,6,5,4,3,2,1};
InsertSort(D,10);
return 0;
}
运行结果: