扑克牌理牌
直接插入排序算法
直接插入排序(Straight Insertion Sort)的基本操作是将一个记录插入到已经排好序的有序列表中,从而得到一个新的,记录数增加1的有序表
运行示例:
插入排序
/* 对顺序表L作直接插入排序*/
#include <stdio.h>
#define MAXSIZE 10
typedef struct
{
int r[MAXSIZE];
int length;
}SqList;
void swap(SqList *L, int i, int j)
{
int temp = L->r[i];
L->r[i] = L->r[j];
L->r[j] = temp;
}
void InsertSort(SqList *L)
{
int i, j;
for(i = 2; i <= L->length; i++)
{
if(L->r[i] < L->r[i-1]) //需将L->r[i]插入有序表
{
L->r[0] = L->r[i]; //设置哨兵
for(j = i-1; L->r[j] > L->r[0]; j--)
{
L->r[j+1] = L->r[j]; // 记录后移
}
L->r[j+1] = L->r[0]; //插入到正确位置
}
}
}
int main()
{
SqList H;
int n;
scanf("%d",&n);
H.length = n-1; //实际长度为n-1
for(int i = 0; i < n; i++)
{
scanf("%d",&H.r[i]);
}
InsertSort(&H);
for(int i = 1; i < n; i++)
{
printf("%d ",H.r[i]);
}
}
/*
------------------
程序运行示例:
6
0 5 3 4 6 2
2 3 4 5 6 %
------------------
*/