Java 常用算法(冒泡、選擇、插入、快排)
1. 冒泡排序的實現
冒泡排序是所有排序算法中最基本、最簡單的一種。思想就是交換排序,通過比較和交換相鄰的數據來達到排序的目的。
設數組的長度為N:
1、比較前後相鄰的二個數據,如果前面數據大於後面的數據,就將這二個數據交換。
2、這樣對數組的第0個數據到N-1個數據進行一次遍歷後,最大的一個數據就“沈”到數組第N-1個位置。
3、N=N-1,如果N不為0就重復前面二步,否則排序完成。
按照這個定義很快就能寫出代碼:
public static void sort(int[] arr){
int n = arr.length;
for (int i = 0; i < n; i++) {
for (int j = 1; j < n-i; j++) {
if(arr[j-1] > arr[j]){
int temp = arr[j-1];
arr[j-1] = arr[j];
arr[j] = temp;
}
}
}
}
2. 選擇排序的實現
選擇排序算法在每一步中選取最小值來重新排序,通過選擇和交換來實現排序。 具體流程如下: 1、首先從原數組中選擇最小的1個數據,將其置於第一個位置。 2、然後從剩下的數據中再選擇其中最小的一個數據,並將其置於原數組的第二個位置。 3、不斷重復選擇和交換的過程,直至最後排序完成。public static void sort(int[] arr){
int temp ;
int small;
for (int i = 0; i < arr.length; i++) {
small = i;
//找出最小數的下標
for (int j = i+1; j < arr.length; j++) {
if(arr[j] < arr[small]){
small = j;
}
}
//交換
if(small != i){
temp = arr[i];
arr[i] = arr[small];
arr[small] = temp;
}
}
}
3. 插入排序的實現
直接插入排序是將未排序的數據插入至已排好序序列的合適位置。 具體流程如下: 1、首先比較數組的前兩個數據,並排序; 2、比較第三個元素與前兩個排好序的數據,並將第三個元素放入適當的位置; 3、比較第四個元素與前三個排好序的數據,並將第四個元素放入適當的位置; ...... 4、直至把最後一個元素放入適當的位置。 public static void sort(int[] arr){ int temp ;
for (int i = 1; i < arr.length; i++) {
//待插入的數據
temp = arr[i];
int j;
for (j = i-1; j >= 0; j--) {
//判斷是否大於 temp, 大於則後移
if(arr[j] > temp){
arr[j+1] = arr[j];
}else{
break;
}
}
arr[j+1] = temp;
}
}
4. 快速排序的實現
快速排序,顧名思義,是一種速度快,效率高的排序算法。
快排原理: 在要排的數(比如數組A)中選擇一個中心值key(比如A[0]),通過一趟排序將數組A分成兩部分,其中以key為中心,key右邊都比key大,key左邊的都key小,然後對這兩部分分別重復這個過程,直到整個有序。 整個快排的過程就簡化為了一趟排序的過程,然後遞歸調用就行了。 一趟排序的方法: 1、定義i=0,j=A.lenght-1,i為第一個數的下標,j為最後一個數下標 2、從數組的最後一個數Aj從右往左找,找到第一小於key的數,記為Aj; 3、從數組的第一個數Ai 從左往右找,找到第一個大於key的數,記為Ai; 4、交換Ai 和Aj 5、重復這個過程,直到 i=j 6、調整key的位置,把A[i] 和key交換public static void sort(int arr[],int low,int high){
//1. 找到程序的出口
if( low > high){
return;
}
//2. 存
int i = low;
int j = high;
//3. key
int key = arr[i];
//4. 完成一次比較
while(i < j){
//4.1 從右邊找到一個小於key的數
while(i<j && arr[j] > key){
j--;
}
// 4.2 從左邊找到一個大於key的數
while(i<j && arr[i] <= key){
i++;
}
//4.3 交換
if(i<j){
int p = arr[i];
arr[i] = arr[j];
arr[j] = p;
}
}
//4.4 跳轉key 的位置
int p = arr[i];
arr[i] = arr[low];
arr[low] = p;
//5. 對 key 左邊的數據快速排序
sort(arr,low,i-1);
//6. 對 key 右邊的數據快速排序
sort(arr,i+1,high);
}
Java 常用算法(冒泡、選擇、插入、快排)