日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 >

算法题2 插序算法

發布時間:2025/3/15 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 算法题2 插序算法 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

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

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

階循環時,從0,1,。。。4,9,進行循環,判斷其中j位上的值比i位上的值大的那一位。

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

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

for (int i = 1; i <= ints.length-1; i++) {if(ints[i]<ints[i-1]) {//當i位的值小于i-1位的值時,開始進行階循環for (int j = 0; j <=i-1; j++) {//當j位的值大于i位的值時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]) {//當i位的值小于i-1位的值時,開始進行階循環for (int j = 0; j <=i-1; j++) {//當j位的值大于i位的值時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;}

還沒有結束,檢查方法中冗余的計算,發現可以中斷一些后面沒用的循環,不是i,也不是k,而是j.

static int[] insertion(int[] ints) {for (int i = 1; i <= ints.length-1; i++) {if(ints[i]<ints[i-1]) {//當i位的值小于i-1位的值時,開始進行階循環for (int j = 0; j <=i-1; j++) {//當j位的值大于i位的值時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;}

最后進一步優化,減少一步循環

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;}

總結

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

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。