重点:从后面插入
将待插入记录R[i]的关键字从右向左依次与有序区中记录R[j](j=i-1,i-2,…,1)的关键字进行比较:
① 若R[j]的关键字大于R[i]的关键字,则将R[j]后移一个位置;
②若R[j]的关键字小于或等于R[i]的关键字,则查找过程结束,j+1即为R[i]的插入位置。
关键字比R[i]的关键字大的记录均已后移,所以j+1的位置已经腾空,只要将R[i]直接插入此位置即可完成一趟直接插入排序。
注意:从前往后,保证前面都是排好的序的,然后再看下一个
代码如下:
#include <stdio.h>
#include <stdlib.h>
void InsertionSort(int data[],int num);
int main()
{
int nData[10] = {4,10,9,8,7,6,5,4,3,2}; //创建10个数据,测试
InsertionSort(nData, 10); //调用插入排序
for (int i = 0; i < 10; ++i)
{
printf("%d ", nData[i]);
}
printf("/n");
system("puase");
return 0;
}
void InsertionSort(int data[],int num)
{
for(int i=1;i<num;i++)
{
for(int j=i-1;j>=0;j--)
{
if(data[j+1]<data[j])
{
int temp=data[j];
data[j]=data[j+1];
data[j+1]=temp;
}
else
break;
}
}
}