藍橋杯 演算法提高 插入排序 python

2021-10-09 17:46:53 字數 1802 閱讀 8153

問題描述

排序,顧名思義,是將若干個元素按其大小關係排出乙個順序。形式化描述如下:有n個元素a[1],a[2],…,a[n],從小到大排序就是將它們排成乙個新順序a[i[1]]tmp,則將a[j]後移到a[j+1],序列變成1 3 4 5 5。

將下標j前移

判斷a[j]>tmp,後移a[j]到a[j+1],得到1 3 4 4 5

將下標j前移

判斷a[j]>tmp,後移a[j]到a[j+1],得到1 3 3 4 5

因為a[j]<=tmp,所以將tmp放回a[j+1],得到 1 2 3 4 5

現在,輸入n個整數,根據以上演算法,輸出插入排序的全過程。

輸入格式

第一行乙個正整數n,表示元素個數

第二行為n個整數,以空格隔開

輸出格式

有n個元素,因此輸出部分分為n個部分,每個部分開頭行為:insert element[i],i為第幾個元素。然後對於每乙個部分,輸出該部分該元素在插入排序過程中的每一步產生的新序列,初始時的序列以init:打頭,然後每一步後移陣列元素後的元素序列以move back:打頭,最後得到的最終結果序列以final:打頭。序列元素間以乙個空格隔開。示例請看樣例輸出。每乙個部分的insert element[i]之後的每一步的輸出行之前要縮排兩格,即輸出兩個空格。

樣例輸入

53 1 5 4 2

樣例輸出

insert element[1]:

init:3

final:3

insert element[2]:

init:3 1

move back:3 3

final:1 3

insert element[3]:

init:1 3 4

final:1 3 4

insert element[4]:

init:1 3 4 2

move back:1 3 4 4

move back:1 3 3 4

final:1 2 3 4

insert element[5]:

init:1 2 3 4 5

final:1 2 3 4 5

資料規模和約定

n<=100

整數元素在int範圍內

def insertsort(mem):

init =

for a in range(0,len(mem)):

print("insert element[%d]:"%(a+1))

print(" init:"+' '.join(str(i) for i in init)) #不換行輸出

key = init[a]

j = a-1

while j>=0 and keyinit[j+1] = init[j]

print(" move back:"+' '.join(str(i) for i in init)) #不換行輸出

j -= 1

init[j+1] = key

print(" final:"+' '.join(str(i) for i in init)) #不換行輸出

if __name__ == "__main__":

n = int(input())

mem = list(map(int,input().split(" ")))

insertsort(mem)

藍橋杯 試題 演算法提高 成績排序

資源限制 時間限制 1.0s 記憶體限制 256.0mb 問題描述 給出n個學生的成績,將這些學生按成績排序,排序規則,優先考慮數學成績,高的在前 數學相同,英語高的在前 數學英語都相同,語文高的在前 三門都相同,學號小的在前 輸入格式 第一行乙個正整數n,表示學生人數 接下來n行每行3個0 100...

插入排序演算法

插入排序演算法 思想 把排序過程看作是序列單個有序擴充套件為整體有序的過程,即首先取序列第二個元素與第乙個元素比較,將其插入合適位置,再將第三個元素與前兩個元素比較,將其插入合適位置,如此進行,直到最後取第n個元素與前n 1個元素進行比較並將其插入合適位置。演算法 建立日期 2004 12 14 插...

演算法 插入排序

include include 插入排序 n 2為的效率。具體思想 將陣列分為兩部分,一部分是有序的,一部分為無序的 然後從無序中選取乙個數插入在有序的數中的恰當的位置,以此迭代,直到無序的數全部遍厲完畢 void insert sort int a,int n a j tmp break retu...