氣泡排序的核心思想是:從無序佇列的頭部開始,進行兩兩比較,根據大小交換位置,直到最後將最大(小)元素放在佇列的尾部,從而成為有序佇列的一部分
氣泡排序維護兩個for迴圈,第乙個for迴圈控制次數,第二個for迴圈控制兩兩比較。,需要注意的是:氣泡排序從哪冒?一般來將都會從右邊冒出,也就是說右邊(佇列的尾部)就是有序的佇列
public
void
bulllesort
(int
nums)}}
}
**講解:第乙個for迴圈控制次數,那麼很顯然 i 的初始值為0,上限(取得到)為num.length-2,思考:可不可以從其他數(1)開始?如果只是單純的控制次數從幾開始都問題不大,但是在後續的for迴圈中,i還承擔乙個重要的角色:已經排好序的元素數量。前面講過是從無序佇列的頭部開始一直到尾部結束,那如何知道尾部在哪?就是靠這個i變數
第二個for迴圈,控制兩兩比較,因為我是習慣於 i 與 i -1進行比較,所以初始值為1,上限(取得到)為nun.length - i - 1
對於序列第一次比較的時候就已經是序列有序,但是還會不停的進行後續的比較,所以可以進行優化
public
void
bulllesort
(int
nums)}}
}
時間複雜度:最小時間為o(n)跑一遍即可,最壞情況需要比較(n - 1),那麼根據求和公式得到o( n(n-1) / 2 ),所以平均複雜度為o(n2)
空間複雜度:就需要乙個temp變數o(1)
穩定性:因為使用的》所以是穩定演算法
基本思想:每一趟從待排序序列中選擇乙個最大或者最小的元素放在沒有排序的尾部
public
void
selectionsort
(int
nums)
}int temp = nums[minindex]
; nums[minindex]
= nums[i]
; nums[i]
= temp;
}}
時間複雜度:o(n2)
空間複雜度:o(1)
穩定性:不穩定,例如,因為第乙個選擇的是1,所以就變為了,所以不穩定
基本思想:每趟將乙個元素,插入到已經排好序的正確位置
public
void
insertionsort
(int
nums)
nums[j +1]
= temp;
//注意這裡是j+1 因為上面for迴圈最後還是進行了j--
}}
同樣是兩個for迴圈,第乙個for控制插入的次數,第二個for控制要插入的位置,將一些元素進行後移,將當前元素插入到正確位置
時間複雜度:o(n2)
空間複雜度:o(1)
穩定性:穩定
基本思想:在插入排序的基礎上進行分組排序,插入排序是將所有元素看做乙個組,而希爾排序是沒隔乙個步長分為乙個組,組內進行插入排序,有了插入排序的思想應該很好理解
puboic void
shellsort
(int
nums)
nums[j + gap]
= nums[j];}
}}
時間複雜度:希爾排序的使勁複雜度取決於gap的選取,但是肯定小於o(n2)
空間複雜度:o(1)
穩定性:穩定
歸併排序是一種典型的分治思想,先將陣列分為每組只有乙個元素,因為乙個元素預設就是有序的,然後往上合,直接看**
public
int[
]sortarray
(int
nums)
public
void
mergesort
(int
nums,
int left,
int right,
int[
] temp)
else
}for
(int q =
0; q < t;q++
)}
時間複雜度: o(nlogn)
空間複雜度:o(n)
穩定性:穩定
基本思想:建立大頂堆或者小頂堆,然後利用下標為0的元素與大頂堆(小頂堆)最後乙個元素進行交換,關鍵點:
public
int[
]sortarray
(int
nums)
public
void
heapsort
(int
nums)
for(
int j = nums.length -
1;j >
0;j--)}
public
void
adjustheap
(int
nums,
int i,
int length)
if(nums[k]
> temp)
else
break;}
nums[i]
= temp;
}
快速排序的基本思想是利用分治法找到每乙個基準數在陣列中的正確位置即可,使得該基準數左邊的數比該數小,右邊的數比該數大,然後利用分治對該數左邊和右邊進行遞迴快速排序即可
public
void
quicksort
(int
nums,
int left,
int right)
} nums[left]
= nums[i]
; nums[i]
= temp;
quicksort
(nums, left, i -1)
;quicksort
(nums, i +
1, right)
;}
SVM演算法掃盲理解
名稱 svm support vector machine 支援向量機 要解決的問題 二分類問題 形象理解 用乙個超平面,將資料二分類。尋找最優超平面,並使得兩個類別中,距離超平面距離最近的點,距超平面的距離最遠。也即 兩個類別中,距離超平面最近的點,會分別決定兩個平行的超平面,這兩個超平面稱為支援...
加密演算法 基本知識點掃盲
使用加密演算法的必要性 為了資料在網路傳輸過程中的安全,所以使用加密演算法 加密演算法分類 對稱加密 單金鑰體制 對稱性加密 金鑰加密 加解密使用相同金鑰的加密演算法,例如 des演算法 金鑰一旦洩漏,就會很危險 相當於,一把鎖,有多個鑰匙,鑰匙都是相同的,這樣只要別人有了一把鑰匙,就能開啟你的鎖,...
外部排序相關演算法知識
這種方法是根據記憶體的大小將乙個大的檔案資料分成多個長度為l的檔案 又叫做順串 然後分別將每個順串讀入記憶體進行排序 注 可以選用任何一種排序方法 之後輸出到外存中,將已經拍好序的進行多路歸併排序。即從每順串中取出第乙個數比較大小,並找個最小的那個數,將這個數充順串中刪除並輸出,以後按此迴圈即可。勝...