算法記錄

快速排序

基本算法:

歸并排序講數(shù)組分為兩個子數(shù)組分別排序,并將有序的子數(shù)組歸并使得整個數(shù)組排序;

快速排序通過一個切分元素將數(shù)組分為兩個子數(shù)組,左子樹組小于等于切分元素,右子數(shù)組大于等于切分元素,將這兩個子數(shù)組排序也就將整個數(shù)組排序了。


圖解快速排序

public class QuickSort<T extends Comparable<T> extends Sort<T>{

@Override

public void sort(T[] nums){

? ? ? ? ? shuffle(nums);

? ? ? ? ? sort(nums,0,nums.length - 1);

}

private void sort(T[] nums,int 1,int h){

? ? ? ? ? ? if(h <=1)

? ? ? ? ? ? return;

? ? ? ? ? ? int j = partition(nums,1,h);

? ? ? ? ? ? sort(nums,1,j - 1);

? ? ? ? ? ? sort(nums,j + 1,h);

}

private void shuffle(T[] nums){

? ? ? ? ? ? List<Comparable> list = Arrays.asList(nums);

? ? ? ? ? ? Collections.shuffle(list);

? ? ? ? ? ? list.toArray(nums);

}

}

選擇排序

基本算法:

選擇出數(shù)組中的最小元素,將它與數(shù)組的第一個元素交換位置。再從剩下的元素中選擇出最小的元素,將它與數(shù)組的第二個元素交換位置。不斷進(jìn)行這樣的操作,直到將整個數(shù)組排序。

選擇排序需要~N2/2次比較和~N次交換,它的運行時間與輸入無關(guān),這個特點使得它對一個已經(jīng)排序的數(shù)組也需要這么多的比較和交換操作。


圖解選擇排序

public class Selection<T extends Comparable<T>> extends Sort<T>{

@Override

public void sort(T[] nums){

? ? ? ? ? int N = nums.length;

for(int i = 0;i < N - 1;i++){

? ? ? ? ? int min = i;

? ? ? ? ? for (int j = i + 1; j < N;j++){

if(less(nums[j],nums[min])){

? ? ? ? ? min = j;

}

}

swap(nums,i,min);

}

}

}

冒泡排序

基本算法:

從左到右不斷交換相鄰逆序的元素,在一輪的循環(huán)之后,可以讓末排序的最大元素上浮到右側(cè)。在一輪循環(huán)中,如果沒有發(fā)生交換,就說明數(shù)組已經(jīng)是有序的,此時可以直接退出,以下演示了在一輪循環(huán)中,將最大的元素5上浮到最右側(cè)。


圖解冒泡排序

public class Bubble<T extends Comparable<T>> extends Sort<T>{

@Override

public void sort(T[] nums){

? ? ? ? ? ?int N = nums.length;

? ? ? ? ? ?boolean hasSorted = false;

for(int i = N - 1;i > 0 && !hasSorted; i --){

? ? ? ? ? ?hasSorted = true;

for(int? j = 0; j < i; j++){

if(less(nums[j + 1],nums[j])){

? ? ? ? ? hasSorted = false;

? ? ? ? ? swap(nums,j,j + 1);

}

}

}

}

}

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • <center>#1 Two Sum</center> link Description:Given an arr...
    鐺鐺鐺clark閱讀 2,344評論 0 3
  • 【程序1】 題目:古典問題:有一對兔子,從出生后第3個月起每個月都生一對兔子,小兔子長到第三個月后每個月又生一對兔...
    開心的鑼鼓閱讀 3,393評論 0 9
  • 五月份已經(jīng)是繁花開遍的時候,不知不覺中距離自己決定要考的目標(biāo)院校已經(jīng)十五個月了,過程中有迷惘,也有需要雞湯鼓勵的時...
    筆尖躍動心儀閱讀 629評論 0 1
  • 盲兔閱讀 235評論 0 1
  • 青春,一個絢麗的詞語包含了無數(shù)個夢想的開始!每一個,青春年少的年齡都擁有著放肆的理想和無所顧忌的追求。因為美好,...
    春天的麥穗閱讀 571評論 5 6

友情鏈接更多精彩內(nèi)容