/********************************************************************************************************
*
* file name: Zqh_splist_4.22.1.c
* author : keyword2024@163.com
* date : 2024/04/22
* function : 已知一個順序表L,其中的元素遞增有序排列,設計一個演算法,插入一個元素x(x為t型)後保持該順序表仍然遞增有序排列(假設插入操作總能成功)。
* note : 考研題
*
* Copyright (c) 2023-2025 keyword2024@163.com All right Reserved
* ******************************************************************************************************/
#define MAX_SIZE 100
// 定義順序表結構體
typedef struct {
int data[MAX_SIZE];
int length;
} SeqList;
//最佳化前
//遞增排序
void SeqList_Insert(SeqList *L,int x)
{
int temp = -1; //記錄待插入元素的下標
//遍歷順序表,找到插入位置,比較元素
for (int i = 0; i <= last; ++i)
{
if (x < L[i])
{
temp = i;
break;
}
}
if( -1 == temp)
{
L[last+1] = x;
return;
}
//把待插入位置的後繼元素向後移動
for (int i = last; i >= temp; i--)
{
L[i+1] = L[i];
}
L[temp] = x;
}
// 最佳化後
// 在遞增有序的順序表中插入元素 x
void SeqList_Insert(SeqList *L, int x) {
int i, j;
for (i = 0; i < L->length; i++) {
if (L->data[i] >= x) {
break;
}
}
for (j = L->length; j > i; j--) {
L->data[j] = L->data[j - 1];
}
L->data[i] = x;
L->length++;
}
//在演算法檢測時,需要找特殊的情況,列如:0 表頭 表尾 邊界值