問題描述
排序,顧名思義,是將若干個元素按其大小關係排出乙個順序。形式化描述如下:有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...