(冒泡排序)大學裏面最早接觸的一種排序
基本原理
* 比較相鄰的元素。如果第一個比第二個大,就交換他們兩個。 * 對每一對相鄰元素作同樣的工作,從開始第一對到結尾的最後一對。在這一點,最後的元素應該會是最大的數。 * 針對所有的元素重複以上的步驟,除了最後一個。 * 持續每次對越來越少的元素重複上面的步驟,直到沒有任何一對數字需要比較。
代碼實現
public static void bubbleSort(int number[]) { for (int i = 0; i < number.length-1; i++) for (int j = 0; j < number.length-i-1; j++) { if(number[j]>number[j+1]){ int temp=number[j]; number[j]=number[j+1]; number[j+1]=temp; } } }
選擇排序
基本思想
在要排序的一組數中,選出最小的一個數與第一個位置的數交換;然後在剩下的數當中再找最小的與第二個位置的數交換,如此循環到倒數第二個數和最後一個數比較爲止。
代碼實現
public static void selectSort(int number[]){ for(int i=0;i<number.length;i++){ int minIndex=i; //標註最小值,初始爲i for(int j=i;j<number.length;j++){ if(number[j]<number[minIndex]){ minIndex=j; //遍歷i之後的數組,找到最小的數 } } int temp=number[i]; number[i]=number[minIndex]; number[minIndex]=temp; //將i和最小的交換 } }
快速排序
基本思想
通過一趟排序將待排序記錄分割成獨立的兩部分,其中一部分記錄的關鍵字均比另一部分關鍵字小,則分別對這兩部分繼續進行排序,直到整個序列有序。
代碼實現思路
把整個序列看做一個數組,把第零個位置看做中軸,和最後一個比,如果比它小交換,比它大不做任何處理;交換了以後再和小的那端比,比它小不交換,比他大交換。這樣循環往復,一趟排序完成,左邊就是比中軸小的,右邊就是比中軸大的,然後再用分治法,分別對這兩個獨立的數組進行排序。
代碼實現(遞歸實現)
public static void quickSort(int number[],int low,int high){ if(low<high){ int middle=findMiddle(number,low,high); //將low放在數組中間位置,low前面的比它小,low後面的比它大 quickSort(number, low, middle); //分治再次進行快速排序 quickSort(number, middle+1, high); } } public static int findMiddle(int number[],int low,int high){ int temp=number[low]; //將數組的low位置的數看做中軸 while(low<high){ while(low<high&&number[high]>=temp){ high--; //從後往前數找到第一個比temp小的,這裏一定要>=,不然如果數組中有相同的會出現stackOverFlow錯誤 } number[low]=number[high]; //把那個大的數字放到low的位置上 while(low<high&&number[low]<=temp){ //從前往後數找到第一個比temp大的,這裏一定要<=,不然如果數組中有相同的會出現stackOverFlow錯誤 low++; } number[high]=number[low]; //把那個大的數字放到high的位置上 } number[low]=temp; //將中軸數放到low或者high上,此時low應等於high return low; }
插入排序
- 基本思想
每步將一個待排序的記錄,按其順序碼大小插入到前面已經排序的字序列的合適位置(從後向前找到合適位置後),直到全部插入排序完爲止。
代碼實現思路
- 從第一個元素開始,該元素可以認爲已經被排序
- 取出下一個元素,在已經排序的元素序列中從後向前掃描
- 如果該元素(已排序)大於新元素,將該元素移到下一位置
- 重複步驟3,直到找到已排序的元素小於或者等於新元素的位置
- 將新元素插入到該位置中
代碼實現
//插入排序 public static void insertSort(int number[]){ for(int i=0;i<number.length;i++){ int temp=number[i]; int j; for(j=i;j>0&&number[j-1]>temp;j--){ number[j]=number[j-1]; } number[j]=temp; } }
常用排序算法的Java實現
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.