日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

算法题2 插序算法

發(fā)布時(shí)間:2025/3/15 编程问答 15 豆豆
生活随笔 收集整理的這篇文章主要介紹了 算法题2 插序算法 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

首先分析插序算法的原理:
舉例:int [] ints = {0,1,3,4,9,3,2,3,5,1,0};
for循環(huán)進(jìn)行遍歷,判斷相鄰兩個(gè)值得大小,如果前面的小于后面的,就開始進(jìn)行階循環(huán)。
即9,3時(shí),也就是i循環(huán)

for (int i = 1; i <= ints.length-1; i++) {if(ints[i]<ints[i-1]) {//此時(shí)進(jìn)入階循環(huán) j}}

階循環(huán)時(shí),從0,1,。。。4,9,進(jìn)行循環(huán),判斷其中j位上的值比i位上的值大的那一位。

for (int i = 1; i <= ints.length-1; i++) {if(ints[i]<ints[i-1]) {//此時(shí)進(jìn)入階循環(huán) jif(ints[j]>ints[i]) {}}

這時(shí)需要找到介于階循環(huán)中的j ,j 位的值比i位的值大。
需要交換的是j位于i位;j與i位之間的需要后移。先后移即i-1 移到i,直到j(luò)+1 移到j(luò)+2;最后交換j與i位。

for (int i = 1; i <= ints.length-1; i++) {if(ints[i]<ints[i-1]) {//當(dāng)i位的值小于i-1位的值時(shí),開始進(jìn)行階循環(huán)for (int j = 0; j <=i-1; j++) {//當(dāng)j位的值大于i位的值時(shí)if(ints[j]>ints[i]) {int temp=ints[i];for (int k = i; k >=j; k--) {ints[k]=ints[k-1];}ints[j]=temp;}}}}

最后寫成方法:

static int[] insertion(int[] ints) {for (int i = 1; i <= ints.length-1; i++) {if(ints[i]<ints[i-1]) {//當(dāng)i位的值小于i-1位的值時(shí),開始進(jìn)行階循環(huán)for (int j = 0; j <=i-1; j++) {//當(dāng)j位的值大于i位的值時(shí)if(ints[j]>ints[i]) {int temp=ints[i];for (int k = i; k >=j; k--) {ints[k]=ints[k-1];}ints[j]=temp;}}}}return ints;}

還沒有結(jié)束,檢查方法中冗余的計(jì)算,發(fā)現(xiàn)可以中斷一些后面沒用的循環(huán),不是i,也不是k,而是j.

static int[] insertion(int[] ints) {for (int i = 1; i <= ints.length-1; i++) {if(ints[i]<ints[i-1]) {//當(dāng)i位的值小于i-1位的值時(shí),開始進(jìn)行階循環(huán)for (int j = 0; j <=i-1; j++) {//當(dāng)j位的值大于i位的值時(shí)if(ints[j]>ints[i]) {int temp=ints[i];for (int k = i; k >=j; k--) {ints[k]=ints[k-1];}ints[j]=temp;break;}}}}return ints;}

最后進(jìn)一步優(yōu)化,減少一步循環(huán)

static int[] insertion2(int[] ints) {for (int i = 1; i <= ints.length-1; i++) {for (int j = i; j >0; j--) {if(ints[j]<ints[j-1]) {int temp=ints[j-1];ints[j-1]=ints[j];ints[j]=temp;}}}return ints;}

總結(jié)

以上是生活随笔為你收集整理的算法题2 插序算法的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。