1. 程式人生 > >Java 排序 快速排序 氣泡排序 選擇排序 插入排序

Java 排序 快速排序 氣泡排序 選擇排序 插入排序

在平常寫程式碼的過程中我們經常會遇到排序的情況,下面我就寫了幾種常見的排序演算法,雖然在真正的專案開發中。很少會用到自己寫的排序演算法。但是隻有懂得了排序演算法具體是怎麼實現的,這樣用起來就會更加的得心應手。我只寫了幾種演算法。下面貼上自己寫的程式碼。程式碼裡面有演算法的思路,希望能夠有點用。


package sort;
/**
 * @author  曾煒龍  E-mail: [email protected]
 * @date 建立時間:2017年8月9日 上午10:22:11 
 * @version 1.0 
 * @parameter  排序演算法
 * @since  
 * @return
*/
public class SortDemo { /** * 氣泡排序 * 比較相鄰的元素,如果第一個比第二個大,就交換他們兩個 * 對麼一堆相鄰元素做同樣的工作,從開始第一對到結尾最後一對。在這一點,最後的元素應該會是最大的數 * 針對所有的元素重複以上的步驟,除了最後一個, * 持續每次對越來越少的元素重複上面的步驟,知道沒有任何一對數字需要比較 * @param numbers 整型陣列 */ public static void bubbleSort(int[] numbers){ int
size = numbers.length; int temp = 0; for(int i = 0;i<size-1;i++){ for(int j = 0;j<size-1-i;j++){ if(numbers[j]>numbers[j+1]){ temp = numbers[j]; numbers[j] = numbers[j+1]; numbers[j+1] = temp; } } } } /** * 快速排序 * 快速排序利用分治法,先取中值,然後利用中值對兩邊分別進行排序,然後遞迴呼叫函式。最後將陣列組合在一起,就是排好序的 * */
public static void quickSort(int[] numbers,int low,int hign){ if(low<hign){ int middle = getMiddle(numbers,low,hign); quickSort(numbers,low,middle-1); //對低的一方進行遞迴排序 quickSort(numbers,middle+1,hign); //對高的一方進行遞迴排序 } } public static int getMiddle(int[] numbers,int low,int hign){ int temp = numbers[low]; //陣列的第一個元素為中值 while(low<hign){ while(low<hign && numbers[hign]>temp){ hign--; } numbers[low] = numbers[hign]; while(low<hign && numbers[low]<temp){ low++; } numbers[hign] = numbers[low]; } numbers[low] = temp; return low; } /** * 快速排序方法呼叫 * */ public static void quick(int[] numbers){ if(numbers.length>0){ quickSort(numbers,0,numbers.length-1); } } /** * 選擇排序 * 在未排序序列中找到最小元素,存放到排序序列的起始位置 * 再從剩餘的元素中找到最小元素存放到 排序序列起始位置 * 以此類推,直到最後一個數排序完成 */ public static void selectSort(int[] numbers){ int size = numbers.length; int temp = 0; //中間變數 for(int i=0;i<size;i++){ int k = i; for(int j=size-1;j>i;j--){ if(numbers[j]<numbers[k]){ k= j; } } temp = numbers[i]; numbers[i] = numbers[k]; numbers[k] = temp; } } /** * 插入排序 * 取出第一個值,在排序序列元素中從後向前掃描 * 如果該元素大於新元素,則將該元素移到下一位置 * 重複步驟,直到找到已排序的元素小於或等於新元素的位置 */ public static void insertSort(int[] numbers){ int size = numbers.length; //陣列長度 int temp = 0; //中間量 int j = 0; for(int i=0;i<size;i++){ temp = numbers[i]; for(j=i;j>0&&temp<numbers[j-1];j-- ){ numbers[j] = numbers[j-1]; } numbers[j] = temp; } } }