題目:給定9個(gè)有序的數(shù)列,從中插入一個(gè)數(shù),然后重新按從小到大(或者從大到小進(jìn)行)排序。
原理:通過挪位置數(shù)字進(jìn)行插入,先上代碼:
首先9個(gè)數(shù)字排好序放入一個(gè)數(shù)組中,通過輸入要插入的數(shù),將其和數(shù)組中的數(shù)進(jìn)行比較,然后確定插入數(shù)應(yīng)該在數(shù)組的哪個(gè)位置,如此即可先定位;
后面的for循環(huán)即是挪位置的具體代碼實(shí)現(xiàn);
誤區(qū):1.注意if語句內(nèi)要放一個(gè)break跳出for循環(huán),不然會(huì)一直循環(huán)下去,直到p=9,這樣結(jié)果也會(huì)出現(xiàn)誤差
2.arr[p]=x,這句代碼要放在外面,如果放在了里面會(huì)導(dǎo)致要插入的那個(gè)數(shù)位置還沒給你挪出來,就直接被替換掉了,這樣會(huì)少了原本的一個(gè)數(shù),然后差入的數(shù)打印兩個(gè)出來
3.注意數(shù)組越界問題
再給個(gè)進(jìn)階點(diǎn)的:即實(shí)現(xiàn)任意輸入9個(gè)數(shù)排序后再插入一個(gè)數(shù)進(jìn)行排序(冒泡排序/選擇排序+上面代碼),有興趣可以寫一下:
這個(gè)代碼要注意一個(gè)問題:就是數(shù)組初始化是10個(gè)數(shù)的,而實(shí)際輸入只有9個(gè)數(shù)(有一個(gè)數(shù)是后面要插入的,加起來是10個(gè)),這樣arr[9]=0,我們不能讓這個(gè)數(shù)參與那9個(gè)數(shù)的排序,不然0就會(huì)被擠到第一個(gè)數(shù)去,然后原本9個(gè)數(shù)的最大數(shù)在數(shù)組的第10個(gè)數(shù)位置,這樣后面我們插入一個(gè)數(shù)進(jìn)去排序的時(shí)候,就會(huì)把原本的10個(gè)數(shù)擠出去,導(dǎo)致打印的結(jié)果出錯(cuò),其實(shí)就是0占了位置。
如有不對(duì),歡迎指正。
本文摘自 :https://blog.51cto.com/u