重拾算法:算法效率分析(一)(空間復(fù)雜度和時(shí)間復(fù)雜度)
image.png
image.png
image.png
選擇排序
每一次從待排序的數(shù)據(jù)元素中選出最小(或最大)的一個(gè)元素沼撕,存放在序列的起始位置斩披,直到全部待排序的數(shù)據(jù)元素排完闸衫。選擇排序是不穩(wěn)定的排序方法(比如序列[5买优, 5讹开, 3]第一次就將第一個(gè)[5]與[3]交換丸卷,導(dǎo)致第一個(gè)5挪動(dòng)到第二個(gè)5后面)枕稀。
關(guān)鍵在于需要找到最小元素,并修改minIndex的值谜嫉。與待排序序列的起始位置交換萎坷。
for (int i = 0; i < array.length - 1; i++) {
int minIndex = i;
for (int j = i + 1; j < array.length; j++) {
if (array[j] < array[minIndex]) {
minIndex = j;
}
}
if (i != minIndex) {
int temp = array[minIndex];
array[minIndex] = array[i];
array[i] = temp;
}
}
插入排序
每步將一個(gè)待排序的紀(jì)錄,按其關(guān)鍵碼值的大小插入前面已經(jīng)排序的文件中適當(dāng)位置上沐兰,直到全部插入完為止哆档。
for (int i = 1; i < array.length; i++) {
for (int j = i; j > 0; j--) {
if(array[j]<array[j-1]){
int temp = array[j];
array[j] = array[j-1];
array[j-1] = temp;
}
}
}
冒泡排序
for(int i= array.length-1; i>0;i--){
for(int j=0;j<i;j++){
if(array[j+1]>array[j]){
int temp = array[j+1];
array[j+1] = array[j];
array[j] = temp;
}
}
}