首先分析插序演算法的原理:
舉例:int ints = ;
for迴圈進行遍歷,判斷相鄰兩個值得大小,如果前面的小於後面的,就開始進行階迴圈。
即9,3時,也就是i迴圈
for
(int i =
1; i <= ints.length-
1; i++
)}
階迴圈時,從0,1,。。。4,9,進行迴圈,判斷其中j位上的值比i位上的值大的那一位。
for
(int i =
1; i <= ints.length-
1; 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++
) ints[j]
=temp;}}
}}
最後寫成方法:
static
int[
]insertion
(int
ints)
ints[j]
=temp;}}
}}return ints;
}
還沒有結束,檢查方法中冗餘的計算,發現可以中斷一些後面沒用的迴圈,不是i,也不是k,而是j.
static
int[
]insertion
(int
ints)
ints[j]
=temp;
break;}
}}}return ints;
}
最後進一步優化,減少一步迴圈
static
int[
]insertion2
(int
ints)}}
return ints;
}
leetcode刷題 演算法(2) 排序演算法(下)
排序演算法總結 2.11 kth元素 2.12 幾種方法,關鍵 堆 快排 還不是很熟練 2.出現頻率最多的 k 個元素 桶排序,未作出 3.按照字元出現次數對字串排序 同上ok 4.按顏色進行排序 ok215.kth largest element in an array medium 1.採用庫函...
經典演算法題2 遞迴和字典序的全排列演算法
1,遞迴的全排列演算法 以abcd為例 對於abcd,首先以第一位的字元分為四類 1 以a為第一位 abcd 固定a的位置,a後面跟著bcd的全排列 2 以b為第一位 bacd 即交換第乙個字元a和b的位置 固定b的位置,b後面跟著acd的全排列 3 以c為第一位 cbad 即交換第乙個字元a和c的...
演算法基礎題(2)
程式5 題目 利用條件運算子的巢狀來完成此題 學習成績 90分的同學用a表示,60 89分之間的用b表示,60分以下的用c表示。1.程式分析 a b a b這是條件運算子的基本例子。程式6 題目 輸入兩個正整數m和n,求其最大公約數和最小公倍數。1.程式分析 利用輾除法。程式7 題目 輸入一行字元,...