趁找工作之際,著手對演算法進行相關學習和整理,便於自己複習鞏固,也以此來督促自己進行演算法的研究學習。通過對演算法的整理,一方面希望對於自己有所提高,另一方面,也希望提高自己的書面表達能力,文中有所不正確的地方,望批評指出,多謝。
對於演算法學習,從簡單到複雜。今天主要整理一下排序相關的演算法。對於排序而言,一般最常考的就是歸併排序和快速排序,接下來就針對這兩種演算法進行具體說明。
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...