演算法整理 排序(歸併和快排)

2021-06-29 15:51:26 字數 1074 閱讀 1017

趁找工作之際,著手對演算法進行相關學習和整理,便於自己複習鞏固,也以此來督促自己進行演算法的研究學習。通過對演算法的整理,一方面希望對於自己有所提高,另一方面,也希望提高自己的書面表達能力,文中有所不正確的地方,望批評指出,多謝。

對於演算法學習,從簡單到複雜。今天主要整理一下排序相關的演算法。對於排序而言,一般最常考的就是歸併排序和快速排序,接下來就針對這兩種演算法進行具體說明。

public

class mergesort ;

int tmp=new

int[a.length];

new mergesort().mergesort(a, 0, a.length-1, tmp);

for (int i : a)

}//將有序陣列a[first..mid] a[mid+1,last]合併

void merge(int a,int first,int mid,int last,int tmp)else

}while(i<=m)

while(j<=n)

//複製tmp到a陣列

for(i=0;ivoid mergesort(int a,int first,int last,int tmp)

}}

package com.xpn.sort;

public

class quicksort ;

new quicksort().quicksort(a, 0, a.length-1);

for (int i : a)

}//a[begin]為基準進行一次劃分

public

intpartition(int a,int begin,int end)

a[low]=a[high];

//從左到右進行掃瞄

while(lowbase>=a[low])

a[high]=a[low];

}a[low]=base;

return low;//返回基準下標

}void quicksort(int a,int low,int high)

}

排序演算法詳解 選擇 插入 歸併和快排

特點 每次從待排序序列中選取最小值最為當前元素值 流程 已排好序的陣列為a 0,i 1 將未排序序列a i,n 中最小值賦給a i const int maxn 10000 int a maxn void selectsort int a,int n 特點 將未排序元素插入到已排序元素的合適位置上 ...

資料結構與演算法 排序(歸併和快排)

快速排序原理 歸併排序和快速排序的區別 歸併排序的核心思想還是蠻簡單的。如果要排序乙個陣列,我們先把陣列從中間分成前後兩部分,然後對前後兩部分分別排序,再將排好序的兩部分合併在一起,這樣整個陣列就都有序了。歸併排序使用的就是分治思想。分治,顧名思義,就是分而治之,將乙個大問題分解成小的子問題來解決。...

排序演算法 快排,歸併

從陣列中隨機選乙個數,比這個數大的放右邊,比這個數小的放左邊。快排中的乙個細節 如果乙個數等於p的時候,既可以在左邊又可以在右邊。這麼做是為了避免如果陣列中所有的數都一樣,則會造成資料的不平衡。快排的目的是能夠使得左邊和右邊的數都差不多,這樣的話時間複雜度就不會退化到o n 2 而是o n logn...