Android開發 常用排序演算法
阿新 • • 發佈:2018-12-30
1、氣泡排序
氣泡排序,陣列從小到大排列,比較相鄰的元素。如果第一個比第二個大,就交換他們兩個。
示例:
/* * 氣泡排序 * 前後兩個元素相比較,最大的往後排,每一輪都可以找到一個最大的元素 */ publicstaticint[] bubbleSort(int[] nums){ int temp =0; for (int i = 0; i < nums.length-1; i++) { for (int j = 0; j < nums.length-1-i; j++) { if (nums[j]>nums[j+1]){ temp= nums[j]; nums[j]=nums[j+1]; nums[j+1]= temp; } } } return nums; }
排序前:{3,1,4,9,5,10,6,19,0,7,2,3}
排序後:[0,1, 2, 3, 3, 4, 5, 6, 7, 9, 10, 19]
時間複雜度:O(n2)
2、快速排序
快速排序,通過一趟排序將待排序記錄分割成獨立的兩部分,其中一部分記錄的關鍵字均比另一部分關鍵字小,則分別對這兩部分繼續進行排序,直到整個序列有序。
示例:
/* * 快速排序 * 取第一個元素為基數,迴圈比較最小位置值與最大位置值,較大的往後排,較小的往前排, * 然後並較小的位數加一,較大的位數減一,迴圈結果就是中間位數, * 最後就是以中間兩部分分開做遞迴運算再次比較排列,直到正確排序為止 */ publicstaticvoid quickSort(int[] nums, int low, int high) { if (low < high) { int temp = nums[low]; // 選定的基準值(第一個數值作為基準值) int middle; // 記錄臨時中間值 int i = low, j = high; do { while ((nums[i] < temp)&& (i < high)) i++; while ((nums[j] > temp)&& (j > low)) j--; if (i <= j) { middle= nums[i]; nums[i]= nums[j]; nums[j]= middle; i++; j--; } }while(i <= j); if (low < j) quickSort(nums,low, j); if (high > i) quickSort(nums,i, high); } }
排序前:{3,1,4,9,5,10,6,19,0,7,2,3}
排序後:[0,1, 2, 3, 3, 4, 5, 6, 7, 9, 10, 19]
時間複雜度:O(n2)
3、選擇排序
選擇排序,每次尋找序列中的最小值,然後放在最首位的位置。
示例:
/* * 選擇排序 * 從後往前排,設預設最小元素與較大位置比較,如果比最小元素大, * 則將該位置記為最小元素,並且迴圈比較最小元素,找到最小元素, * 最後將最小元素賦值最前方, */ publicstaticvoid selectSort(int[] nums) { int size = nums.length, temp; for (int i = 0; i < size; i++) { int k = i; //臨時最小元素位數 for (int j = size - 1; j >i; j--) { if (nums[j] < nums[k]) k = j; } temp = nums[i]; nums[i] = nums[k]; nums[k] = temp; } }
排序前:{3,1,4,9,5,10,6,19,0,7,2,3}
排序後:[0,1, 2, 3, 3, 4, 5, 6, 7, 9, 10, 19]
時間複雜度:O(n2)
4、插入排序
插入排序,通過構建有序序列,對於未排序資料,在已排序序列中從後向前掃描,找到相應位置並插入。
示例:
/*
* 插入排序
* 基準元素相鄰元素比較,較大的往後排,然後從較大的位置開始往後與基準元素比較排列,
* 最後把最小的插入較小位
*/
publicstaticvoid insertSort(int[] nums) {
int size = nums.length, temp, j;
for(int i=1; i<size; i++) {
temp = nums[i];//基準元素
for(j = i; j > 0 && temp < nums[j-1];j--)
nums[j] = nums[j-1];
nums[j] = temp;
}
}
排序前:{3,1,4,9,5,10,6,19,0,7,2,3}
排序後:[0,1, 2, 3, 3, 4, 5, 6, 7, 9, 10, 19]
時間複雜度:O(n2)