直接插入排序
算法思想:
直接插入排序的基本操作是将第 i 个记录插入到前面 i-1 个已经排好序的记录中。
具体过程为:将第 i 个记录的关键字 K 依次与前面排好序的关键字比较,如果比较的关键字大于 K ,则将该关键字后移一位,直至遇到小于 K 的关键字或到序列头部,然后将 K 插入到该关键字后面或序列头部(之前比较过的已经后移一位,所以会留有一个空位置供 K 插入)。
算法描述:
void InSort(RecordType r[],int length)
//length 为数组中待排序记录的数目
{
for(i = 2;i<=length;i++)
{
r[0] = r[i];//r[0]为监视哨
j = i -1;
while(r[0].key<r[j].key)//寻找插入位置
{
r[j+1] = r[j];
j = j-1;
}
r[j+1] = r[0];//将待插入记录插入到已排序的序列中
}
}
完整代码:
#include<stdio.h>
void insSort(int a[],int lengh){
int i = 1;//i从数组的第二个位置开始,前面只有一个数,所以是排好序的
for(;i<lengh;i++){
int x = a[i];//x为监视哨,记录待插入的关键字值
int j = i-1;//j = j-1 --> 要和关键字x比较的是 i 之前的序列
while(x<a[j]){
a[j+1] = a[j];//大于x就后移
j--;
}
a[j+1] = x;//将关键字插入到空位置
}
}
int main()
{
int a[] = {
48,62,35,77