SDUT 3712 插入排序

2021-09-26 16:15:53 字數 1306 閱讀 8560

現有 n 個從小到大排列的數組成的序列。需要對這個序列進行 c 次操作。

每次操作有兩種型別:

操作 1:插入乙個數 v 到序列中,並保持有序。

操作 2:輸出當前的序列。

blue 並不太擅長序列操作,所以他想來請求你的幫助,你能幫助他完成這個任務嗎?

輸入資料有多組(資料組數不超過 30),到 eof 結束。

對於每組資料:

第 1 行輸入乙個整數 n (1 <= n <= 10^5),表示初始的有序序列中數字的個數。

第 2 行輸入 n 個用空格隔開的整數 ai (0 <= ai <= 10^6),表示初始序列。

第 3 行輸入乙個整數 c (1 <= c <= 1000),表示有 c 次操作。

接下來有 c 行,每行表示一次操作:

如果操作型別為 1,則輸入格式為 「1 v」,其中 v (0 <= v <= 1000) 表示要插入到序列的數。

如果操作型別為 2,則輸入格式為 「2」。

對於每組資料中的每次型別為 2 的操作,輸出一行,表示當前的序列,每個數之間用空格隔開。

示例輸入:

5

1 2 2 3 5

51 0

21 3

1 72

示例輸出:

0 1 2 2 3 5

0 1 2 2 3 3 5 7

解決方案:

建表,尋找插入位置即可。考慮到資料量,可使用scanf過oj,防止出現tle.

再考慮到資料量,建表之後,如果不用這個表了就清空這個表。不然的話會出mle.

ac**:

#include #include using namespace std;

typedef struct lnodelnode,*linklist;

void create(linklist l,int n)

}void insert(linklist l,int val)

else

}lnode *tmp = new lnode;

tmp->val = val;

tmp->next = null;

pre->next = tmp;

}void del(linklist &l)

}void print(linklist l)

else

l = l->next;

}cout<>n).eof())

else

}del(l);

}return 0;

}

插入排序SDUT

插入排序 description 現有 n 個從小到大排列的數組成的序列。需要對這個序列進行 c 次操作。每次操作有兩種型別 操作 1 插入乙個數 v 到序列中,並保持有序。操作 2 輸出當前的序列。blue 並不太擅長序列操作,所以他想來請求你的幫助,你能幫助他完成這個任務嗎?input 輸入資料...

插入排序 折半插入排序

折半插入排序 binary insertion sort 直接插入排序採用順序查詢法查詢當前記錄在已排好序的序列中插入位置,這個 查詢 操作可利用 折半查詢 來實 現,由此進行的插入排序稱之為折半插入排序 binary insertion sort 演算法思想 1 將待排序的記錄存放在陣列r 1.n...

插入排序 折半插入排序

折半插入排序是基於直接插入排序的優化。直接插入排序 將第i個元素插入時,通過折半查詢的方式,來查詢第i個元素合適的位置。當0 i 1 位置上的元素都已經排序ok,現需要插入第i個元素,設其值為temp 令low 0,high i,mid high low 2。那麼temp可能插入的位置是 low h...