排序和去重--说说两个简单常用的算法
{
? ? for(int j = i +1; j< n ;j++)
? {
? ? if(array[i] > array[j])
? ? {
? ? ? ? int a =?array[i];
? ? ? ?array[i] =?array[j];
? ? ? ?array[j] = a;
? ? ?}? }
}
理解冒泡算法很簡單:第一次以第一個數據為開始比較拿到數據中的最值放到原來的位置,然后往下移動一次,找尋另外的n-1個數據中的最值,放入第二個位置,一次這樣運行結束。
冒泡排序的時間復雜度計算:由于在循環的最中心的區域有數據比較和交換的執行,所以這三行代碼要計算時間復雜度,因此最短時間為n*(n-1)/2 ;最長時間是 n*3(n-1)/2;平均起來時間復雜度就是 O(n^2)。其實這個計算不合理,以為在循環的核心中有比較計算,比較計算也是需要耗費時間的,那么應該是n*(n-1)/2 和n*4(n-1)/2的均值。
? ? ?去重算法 -- 比較去重
?對于一個數據結構判斷重復的數組不能直接在原有的數據結構中剔除,這樣會導致數據結構索引溢出。
最常用最簡單的算法就是一次比較去重:
for(i = 0; i < n; i++)
{?
? ?for(int j = i + 1; j < n; j++ )
? {
? ? ?if(array[i] == array[j])
? ? ? {
? ? ? ? ?continue;
? ? ? ? }
? ? ? ?else
? ? ? {
? ? ? ? ?if(j == n-1)
? ? ? ? ?{
? ? ? ? ? ? //都比較完了?
? ? ? ? ? ? list.add(array[i]);
? ? ? ? ? }
? ? ? ?}
? }
}
時間復雜度平均值:[n*(n-1)/2 + n*2(n-1)/2]/2 ?~= O(1.5n^2)
空間復雜度平局值:O(n)
總結
以上是生活随笔為你收集整理的排序和去重--说说两个简单常用的算法的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 伊德海拉之影操作键
- 下一篇: Kotlin binding+Recyc