需要用到的结构体
struct LNode {int Data[MAXSIZE]; //Data为待排序序列数组 int Last; //Last为最后一个元素的数组下标
};
typedef struct LNode *List;void InsertionSort(List L);
关于插入排序,是先将要插入的数据提出来,再以这个数据为开始,向前遍历
这里,我们取一个例子来插入排序,假设4,5已排序好
这是比前面所有值都小的情况,那么,另一种情况就是没遍历结束就找到了插入位置(那么我们直接让它跳出循环即可),也就是前一个比后一个小的情况,这时候就不需要交换位置了
所以我们可以写下实现函数
void InsertionSort(List L) {int temp = 0;//插入n-1次for (int i = 1; i <= L->Last; i++) {temp = L->Data[i];//保存要插入的数据int j = i;for (j; j > 0; j--) {if (temp < L->Data[j - 1])L->Data[j] = L->Data[j - 1];//如果不再交换,则找到了插入位置elsebreak;}L->Data[j] = temp;}
}